Module:ClangDiags/DiagsLongData4: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
local a="";
local a="";
local b="regex3";
local b="regex3";
local c="commit";
local c="title";
local d="prefix";
local d="prefix";
local e="type";
local e="commit";
local f="message";
local f="type";
local g="regex1";
local g="message";
local h="regex2";
local h="category";
local i="title";
local i="regex1";
local j="category";
local j="regex2";
local k="source";
local k="source";
local l="error: ";
local l="(?:error|fatal error)\\: ";
local m="Error";
local m="Error";
local n="(?:error|fatal error)\\: ";
local n="error: ";
local o="tests2";
local o="tests2";
local p="Semantic Issue";
local p="Semantic Issue";
local q="clang/lib/Sema/SemaExpr.cpp";
local q="Update tablegen diagnostic files to be in sync with the def files.";
local r="clang/lib/Sema/SemaTemplate.cpp";
local r="clang/lib/Sema/SemaExpr.cpp";
local s="Update tablegen diagnostic files to be in sync with the def files.";
local s="clang/lib/Sema/SemaTemplate.cpp";
local t="5a8987ca5113";
local t="5a8987ca5113";
local u="clang/lib/Sema/SemaDecl.cpp";
local u="clang/lib/Sema/SemaDecl.cpp";
Line 23: Line 23:
local w="clang/lib/Sema/SemaChecking.cpp";
local w="clang/lib/Sema/SemaChecking.cpp";
local x="clang/lib/Parse/ParsePragma.cpp";
local x="clang/lib/Parse/ParsePragma.cpp";
local y="Lexical or Preprocessor Issue";
local y="[WebAssembly] Improve clang diagnostics for wasm attributes";
local z="clang/lib/Sema/SemaDeclCXX.cpp";
local z="Lexical or Preprocessor Issue";
local A="b1c4d5507fad";
local A="clang/lib/Sema/SemaDeclCXX.cpp";
local B="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local B="Implement P2361 Unevaluated string literals";
local C="clang/lib/Sema/SemaAttr.cpp";
local C="Add #pragma clang attribute";
local D="clang/lib/Lex/PPDirectives.cpp";
local D="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.";
local E="clang/lib/Sema/SemaInit.cpp";
local E="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local F="clang/lib/Sema/SemaExprCXX.cpp";
local F="b1c4d5507fad";
local G="clang/lib/Sema/SemaType.cpp";
local G="clang/lib/Sema/SemaAttr.cpp";
local H="931fcd3ba011";
local H="clang/lib/Lex/PPDirectives.cpp";
local I="[WebAssembly] Improve clang diagnostics for wasm attributes";
local I="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local J="clang/lib/Sema/SemaExprMember.cpp";
local J="clang/lib/Sema/SemaExprCXX.cpp";
local K="clang/lib/Lex/Pragma.cpp";
local K="clang/lib/Sema/SemaType.cpp";
local L="Implement P2361 Unevaluated string literals";
local L="Mass-rename the handful of error_* diagnostics to err_*.";
local M="clang/test/SemaSYCL/zero-length-arrays.cpp:9:3: error: zero-length arrays are not permitted in SYCL device code";
local M="clang/lib/Sema/SemaInit.cpp";
local N="clang/lib/Sema/SemaStmt.cpp";
local N="Let clang atomic builtins fetch add/sub support floating point types";
local O="95f50964fbf5";
local O="931fcd3ba011";
local P="0a849f47d2f7";
local P="clang/lib/Sema/SemaExprMember.cpp";
local Q="clang/lib/Sema/SemaDeclAttr.cpp";
local Q="clang/lib/Lex/Pragma.cpp";
local R="Add #pragma clang attribute";
local R="95f50964fbf5";
local S="clang/lib/Sema/SemaObjCProperty.cpp";
local S="clang/test/SemaSYCL/zero-length-arrays.cpp:9:3: error: zero-length arrays are not permitted in SYCL device code";
local T="clang/lib/Parse/ParseDecl.cpp";
local T="clang/lib/Sema/SemaStmt.cpp";
local U="14f6bfcb52e7";
local U="0a849f47d2f7";
local V="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local V="clang/lib/Sema/SemaDeclAttr.cpp";
local W="clang/test/Parser/pragma-attribute.cpp";
local W="clang/lib/Sema/SemaObjCProperty.cpp";
local X="Mass-rename the handful of error_* diagnostics to err_*.";
local X="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local Y="f881267db9a9";
local Y="clang/lib/Parse/ParseDecl.cpp";
local Z="clang/lib/Sema/SemaDeclObjC.cpp";
local Z="clang/test/Parser/pragma-attribute.cpp";
local ab="Let clang atomic builtins fetch add/sub support floating point types";
local ab="14f6bfcb52e7";
local bb="61d065e21ff3";
local bb="f881267db9a9";
local cb="clang/lib/Parse/Parser.cpp";
local cb="Improve static checks for sprintf and __builtin___sprintf_chk";
local db="clang/lib/Sema/SemaOverload.cpp";
local db="61d065e21ff3";
local eb="clang/lib/Parse/ParseDeclCXX.cpp";
local eb="clang/lib/Sema/SemaDeclObjC.cpp";
local fb="clang/lib/Sema/SemaExprObjC.cpp";
local fb="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
local gb="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:30:16: error: cannot use type \'double_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit";
local gb="clang/lib/Sema/SemaOverload.cpp";
local hb="clang/lib/Parse/ParseExprCXX.cpp";
local hb="Reland [clang] Check unsupported types in expressions";
local ib="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:28:15: error: cannot use type \'float_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit";
local ib="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local jb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local jb="clang/lib/Parse/ParseDeclCXX.cpp";
local kb="739b410f1ff5";
local kb="clang/lib/Parse/Parser.cpp";
local lb="clang/lib/Sema/SemaCast.cpp";
local lb="Reimplement reference initialization (C++ [dcl.init.ref]) using the";
local mb="clang/lib/Sema/Sema.cpp";
local mb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local nb="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local nb="clang/lib/Parse/ParseExprCXX.cpp";
local ob="clang/lib/Lex/PPMacroExpansion.cpp";
local ob="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:28:15: error: cannot use type \'float_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit";
local pb="clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp";
local pb="clang/lib/Sema/SemaExprObjC.cpp";
local qb="Refactoring Invocation Issue";
local qb="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:30:16: error: cannot use type \'double_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit";
local rb="clang/lib/Parse/ParseStmt.cpp";
local rb="clang/lib/Sema/SemaCast.cpp";
local sb="6d485ff455ea";
local sb="[Clang] Implement P2741R3 - user-generated static_assert messages";
local tb="Improve static checks for sprintf and __builtin___sprintf_chk";
local tb="Semantic analysis for the swiftcall calling convention.";
local ub="d13863008b38";
local ub="Parsing/AST support for Structured Exception Handling";
local vb="clang/lib/Sema/SemaLambda.cpp";
local vb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local wb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local wb="739b410f1ff5";
local xb="clang/test/Preprocessor/line-directive.c";
local xb="Attempt typo correction for function calls with the wrong number of arguments.";
local yb="3dbcea8b957a";
local yb="clang/lib/Sema/Sema.cpp";
local zb="Reland [clang] Check unsupported types in expressions";
local zb="Adding a new #pragma for the vectorize and interleave optimization hints.";
local Ab="3e1e52782604";
local Ab="Support warn_unused_result on typedefs";
local Bb="Reimplement reference initialization (C++ [dcl.init.ref]) using the";
local Bb="Switch the initialization required by return statements over to the";
local Cb="clang/lib/Parse/ParseTemplate.cpp";
local Cb="Implement the sizeof...(pack) expression to compute the length of a";
local Db="clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp";
local Db="OpenCL: handle shift operator with vector operands";
local Eb="clang/lib/Basic/Targets.cpp";
local Eb="Implement AST, semantics, and CodeGen for C++ pseudo-destructor";
local Fb="f9c3310d32c6";
local Fb="clang/lib/Lex/PPMacroExpansion.cpp";
local Gb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local Gb="[Clang] P1169R4: static operator()";
local Hb="f60dc3caa673";
local Hb="[c++2a] Add semantic support for private module fragments.";
local Ib="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local Ib="Overhaul checking of non-type template arguments that should refer to";
local Jb="clang/test/SemaCXX/exceptions.cpp";
local Jb="clang/lib/Parse/ParseStmt.cpp";
local Kb="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
local Kb="clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp";
local Lb="Refactoring Invocation Issue";
local Mb="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local Nb="[refactor] Initial outline of implementation of \"extract function\" refactoring";
local Ob="Implement VectorType conditional operator GNU extension.";
local Pb="When we parse a tag specifier, keep track of whether that tag";
local Qb="6d485ff455ea";
local Rb="Add support for \"type safety\" attributes that allow checking that \'void *\'";
local Sb="clang/test/SemaCXX/exceptions.cpp";
local Tb="3e1e52782604";
local Ub="clang/lib/Basic/Targets.cpp";
local Vb="f60dc3caa673";
local Wb="clang/test/Preprocessor/line-directive.c";
local Xb="clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp";
local Yb="f9c3310d32c6";
local Zb="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local ac="3dbcea8b957a";
local bc="clang/lib/Parse/ParseTemplate.cpp";
local cc="clang/lib/Sema/SemaLambda.cpp";
local dc="d13863008b38";


return {
return {
["err_pp_including_mainfile_in_preamble"]={
["err_pp_including_mainfile_in_preamble"]={
[i]="main file cannot be included recursively when building a preamble",
[c]="main file cannot be included recursively when building a preamble",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="main file cannot be included recursively when building a preamble",
[g]="main file cannot be included recursively when building a preamble",
[g]=n,
[i]=l,
[h]="main file cannot be included recursively when building a preamble",
[j]="main file cannot be included recursively when building a preamble",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble"},
[e]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble"},
[k]={{D,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  // 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);"}}
[k]={{H,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  // 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"]={
[i]="invalid preprocessing directive...",
[c]="invalid preprocessing directive...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid preprocessing directive%select{|, did you mean \'#%1\'?}0",
[g]="invalid preprocessing directive%select{|, did you mean \'#%1\'?}0",
[g]=n,
[i]=l,
[h]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[j]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  Diag(Result, diag::err_pp_invalid_directive) << 0;"}},
[k]={{H,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  Diag(Result, diag::err_pp_invalid_directive) << 0;"}},
[o]={
[o]={
["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 118: Line 137:
},
},
["err_pp_invalid_poison"]={
["err_pp_invalid_poison"]={
[i]="can only poison identifier tokens",
[c]="can only poison identifier tokens",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="can only poison identifier tokens",
[g]="can only poison identifier tokens",
[g]=n,
[i]=l,
[h]="can only poison identifier tokens",
[j]="can only poison identifier tokens",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{K,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\n    // Can only poison identifiers.\n    if (Tok.isNot(tok::raw_identifier)) {\n      Diag(Tok, diag::err_pp_invalid_poison);"}}
[k]={{Q,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\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"]={
[i]="invalid token in macro parameter list",
[c]="invalid token in macro parameter list",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid token in macro parameter list",
[g]="invalid token in macro parameter list",
[g]=n,
[i]=l,
[h]="invalid token in macro parameter list",
[j]="invalid token in macro parameter list",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  while (true) {\n    default:\n      if (!II) {\n        Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}}
[k]={{H,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  while (true) {\n    default:\n      if (!II) {\n        Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}}
},
},
["err_pp_invalid_udl"]={
["err_pp_invalid_udl"]={
[i]="... literal with user-defined suffix cannot be used in preprocessor constant expression",
[c]="... literal with user-defined suffix cannot be used in preprocessor constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[g]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[g]=n,
[i]=l,
[h]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[j]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and"},
[e]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and"},
[k]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"clang/lib/Lex/PPExpressions.cpp",380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  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;"}},
[k]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"clang/lib/Lex/PPExpressions.cpp",380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  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;"}},
[o]={
[o]={
Line 157: Line 176:
},
},
["err_pp_line_digit_sequence"]={
["err_pp_line_digit_sequence"]={
[i]="... directive requires a simple digit sequence",
[c]="... directive requires a simple digit sequence",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[g]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[g]=n,
[i]=l,
[h]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[j]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted"},
[e]={"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"},
[k]={{D,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  for (unsigned i = 0; i != ActualLength; ++i) {\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}},
[k]={{H,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  for (unsigned i = 0; i != ActualLength; ++i) {\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}},
[o]={
[o]={
[xb]={"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"}
[Wb]={"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"]={
[i]="invalid filename for #line directive",
[c]="invalid filename for #line directive",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid filename for #line directive",
[g]="invalid filename for #line directive",
[g]=n,
[i]=l,
[h]="invalid filename for \\#line directive",
[j]="invalid filename for \\#line directive",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  // 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  else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_line_invalid_filename);"}},
[k]={{H,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  // 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  else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_line_invalid_filename);"}},
[o]={
[o]={
[xb]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
[Wb]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
}
}
},
},
["err_pp_line_requires_integer"]={
["err_pp_line_requires_integer"]={
[i]="#line directive requires a positive integer argument",
[c]="#line directive requires a positive integer argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="#line directive requires a positive integer argument",
[g]="#line directive requires a positive integer argument",
[g]=n,
[i]=l,
[h]="\\#line directive requires a positive integer argument",
[j]="\\#line directive requires a positive integer argument",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}},
[k]={{H,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  if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}},
[o]={
[o]={
[xb]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"}
[Wb]={"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"]={
[i]="invalid filename for line marker directive",
[c]="invalid filename for line marker directive",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid filename for line marker directive",
[g]="invalid filename for line marker directive",
[g]=n,
[i]=l,
[h]="invalid filename for line marker directive",
[j]="invalid filename for line marker directive",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  // 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  else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{D,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  // 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  } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{D,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  // 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  } else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}},
[k]={{H,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  // 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  else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{H,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  // 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  } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{H,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  // 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  } else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}},
[o]={
[o]={
[xb]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"}
[Wb]={"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"]={
[i]="invalid flag line marker directive",
[c]="invalid flag line marker directive",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid flag line marker directive",
[g]="invalid flag line marker directive",
[g]=n,
[i]=l,
[h]="invalid flag line marker directive",
[j]="invalid flag line marker directive",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{D,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  if (FlagVal == 1) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{D,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  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{D,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  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{D,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  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{D,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  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{D,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  PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
[k]={{H,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  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,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  if (FlagVal == 1) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,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  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,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  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{H,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  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,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  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{H,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  PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
[o]={
[o]={
[xb]={"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"}
[Wb]={"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"]={
[i]="invalid line marker flag \'2\': cannot pop empty include stack",
[c]="invalid line marker flag \'2\': cannot pop empty include stack",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid line marker flag \'2\': cannot pop empty include stack",
[g]="invalid line marker flag \'2\': cannot pop empty include stack",
[g]=n,
[i]=l,
[h]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[j]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}},
[k]={{H,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  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}},
[o]={
[o]={
["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 247: Line 266:
},
},
["err_pp_linemarker_requires_integer"]={
["err_pp_linemarker_requires_integer"]={
[i]="line marker directive requires a positive integer argument",
[c]="line marker directive requires a positive integer argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="line marker directive requires a positive integer argument",
[g]="line marker directive requires a positive integer argument",
[g]=n,
[i]=l,
[h]="line marker directive requires a positive integer argument",
[j]="line marker directive requires a positive integer argument",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
[k]={{H,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  if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
},
},
["err_pp_macro_not_identifier"]={
["err_pp_macro_not_identifier"]={
[i]="macro name must be an identifier",
[c]="macro name must be an identifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="macro name must be an identifier",
[g]="macro name must be an identifier",
[g]=n,
[i]=l,
[h]="macro name must be an identifier",
[j]="macro name must be an identifier",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}},
[k]={{H,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}},
[o]={
[o]={
["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 274: Line 293:
},
},
["err_pp_malformed_ident"]={
["err_pp_malformed_ident"]={
[i]="invalid #ident directive",
[c]="invalid #ident directive",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid #ident directive",
[g]="invalid #ident directive",
[g]=n,
[i]=l,
[h]="invalid \\#ident directive",
[j]="invalid \\#ident directive",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\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);"}}
[k]={{H,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\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"]={
[i]="missing \'(\' following __VA_OPT__",
[c]="missing \'(\' following __VA_OPT__",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="missing \'(\' following __VA_OPT__",
[g]="missing \'(\' following __VA_OPT__",
[g]=n,
[i]=l,
[h]="missing \'\\(\' following __VA_OPT__",
[j]="missing \'\\(\' following __VA_OPT__",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[e]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[k]={{D,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        if (VAOCtx.isVAOptToken(Tok)) {\n          if (Tok.isNot(tok::l_paren)) {\n            Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}},
[k]={{H,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        if (VAOCtx.isVAOptToken(Tok)) {\n          if (Tok.isNot(tok::l_paren)) {\n            Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}},
[o]={
[o]={
["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 301: Line 320:
},
},
["err_pp_missing_macro_name"]={
["err_pp_missing_macro_name"]={
[i]="macro name missing",
[c]="macro name missing",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="macro name missing",
[g]="macro name missing",
[g]=n,
[i]=l,
[h]="macro name missing",
[j]="macro name missing",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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);"}},
[k]={{H,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);"}},
[o]={
[o]={
["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 316: Line 335:
},
},
["err_pp_missing_rparen_in_macro_def"]={
["err_pp_missing_rparen_in_macro_def"]={
[i]="missing \')\' in macro parameter list",
[c]="missing \')\' in macro parameter list",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="missing \')\' in macro parameter list",
[g]="missing \')\' in macro parameter list",
[g]=n,
[i]=l,
[h]="missing \'\\)\' in macro parameter list",
[j]="missing \'\\)\' in macro parameter list",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,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  while (true) {\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{D,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  while (true) {\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{D,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  while (true) {\n    default:\n      case tok::ellipsis: // #define X(A... -> GCC extension\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
[k]={{H,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  while (true) {\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{H,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  while (true) {\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{H,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  while (true) {\n    default:\n      case tok::ellipsis: // #define X(A... -> GCC extension\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"]={
[i]="no module map available for module A",
[c]="no module map available for module A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no module map available for module %0",
[g]="no module map available for module %0",
[g]=n,
[i]=l,
[h]="no module map available for module (.*?)",
[j]="no module map available for module (.*?)",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={ub,1493857794,wb},
[e]={dc,1493857794,ib,ib},
[k]={{K,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (!M) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}}
[k]={{Q,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\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"]={
[i]="submodule A.B not declared in module map",
[c]="submodule A.B not declared in module map",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="submodule %0.%1 not declared in module map",
[g]="submodule %0.%1 not declared in module map",
[g]=n,
[i]=l,
[h]="submodule (.*?)\\.(.*?) not declared in module map",
[j]="submodule (.*?)\\.(.*?) not declared in module map",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={ub,1493857794,wb},
[e]={dc,1493857794,ib,ib},
[k]={{K,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    for (unsigned I = 1; I != ModuleName.size(); ++I) {\n      if (!NewM) {\n        PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}}
[k]={{Q,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    for (unsigned I = 1; I != ModuleName.size(); ++I) {\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"]={
[i]="no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'",
[c]="no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'",
[g]="no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'",
[g]=n,
[i]=l,
[h]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[j]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={ub,1493857794,wb},
[e]={dc,1493857794,ib,ib},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}},
[o]={
[o]={
Line 367: Line 386:
},
},
["err_pp_module_begin_wrong_module"]={
["err_pp_module_begin_wrong_module"]={
[i]="must specify \'-fmodule-name=A\' to enter ...this module...",
[c]="must specify \'-fmodule-name=A\' to enter ...this module...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2",
[g]="must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2",
[g]=n,
[i]=l,
[h]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[j]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={ub,1493857794,wb},
[e]={dc,1493857794,ib,ib},
[k]={{K,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\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;"}}
[k]={{Q,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\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"]={
[i]="no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'",
[c]="no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'",
[g]="no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'",
[g]=n,
[i]=l,
[h]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[j]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build"},
[e]={"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"},
[k]={{K,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  while (true) {\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}},
[k]={{Q,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  while (true) {\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}},
[o]={
[o]={
["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 394: Line 413:
},
},
["err_pp_module_end_without_module_begin"]={
["err_pp_module_end_without_module_begin"]={
[i]="no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'",
[c]="no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'",
[g]="no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'",
[g]=n,
[i]=l,
[h]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[j]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={ub,1493857794,wb},
[e]={dc,1493857794,ib,ib},
[k]={{K,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (M)\n    else\n      PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}},
[k]={{Q,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (M)\n    else\n      PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}},
[o]={
[o]={
["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 409: Line 428:
},
},
["err_pp_nested_paren"]={
["err_pp_nested_paren"]={
[i]="nested parentheses not permitted in A",
[c]="nested parentheses not permitted in A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="nested parentheses not permitted in %0",
[g]="nested parentheses not permitted in %0",
[g]=n,
[i]=l,
[h]="nested parentheses not permitted in (.*?)",
[j]="nested parentheses not permitted in (.*?)",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros"},
[e]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros"},
[k]={{ob,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  already_lexed:\n    case tok::l_paren:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}},
[k]={{Fb,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  already_lexed:\n    case tok::l_paren:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}},
[o]={
[o]={
["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 424: Line 443:
},
},
["err_pp_operator_used_as_macro_name"]={
["err_pp_operator_used_as_macro_name"]={
[i]="C++ operator A (aka B) used as a macro name",
[c]="C++ operator A (aka B) used as a macro name",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="C++ operator %0 (aka %1) used as a macro name",
[g]="C++ operator %0 (aka %1) used as a macro name",
[g]=n,
[i]=l,
[h]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[j]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (II->isCPlusPlusOperatorKeyword()) {\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}},
[k]={{H,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (II->isCPlusPlusOperatorKeyword()) {\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}},
[o]={
[o]={
["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 439: Line 458:
},
},
["err_pp_pragma_hdrstop_not_seen"]={
["err_pp_pragma_hdrstop_not_seen"]={
[i]="#pragma hdrstop not seen while attempting to use precompiled header",
[c]="#pragma hdrstop not seen while attempting to use precompiled header",
[d]="fatal error: ",
[d]="fatal error: ",
[e]="Fatal",
[f]="Fatal",
[f]="#pragma hdrstop not seen while attempting to use precompiled header",
[g]="#pragma hdrstop not seen while attempting to use precompiled header",
[g]="fatal error\\: ",
[i]="fatal error\\: ",
[h]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[j]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"},
[e]={"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"},
[k]={{"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  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
[k]={{"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  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\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"]={
[i]="Expected \'begin\' or \'end\'",
[c]="Expected \'begin\' or \'end\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="Expected \'begin\' or \'end\'",
[g]="Expected \'begin\' or \'end\'",
[g]=n,
[i]=l,
[h]="Expected \'begin\' or \'end\'",
[j]="Expected \'begin\' or \'end\'",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{K,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{K,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (II->isStr(\"begin\")) {\n    } else if (II->isStr(\"end\")) {\n    } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}},
[k]={{Q,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{Q,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (II->isStr(\"begin\")) {\n    } else if (II->isStr(\"end\")) {\n    } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}},
[o]={
[o]={
["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 466: Line 485:
},
},
["err_pp_remainder_by_zero"]={
["err_pp_remainder_by_zero"]={
[i]="remainder by zero in preprocessor expression",
[c]="remainder by zero in preprocessor expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="remainder by zero in preprocessor expression",
[g]="remainder by zero in preprocessor expression",
[g]=n,
[i]=l,
[h]="remainder by zero in preprocessor expression",
[j]="remainder by zero in preprocessor expression",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  while (true) {\n    case tok::percent:\n      if (RHS.Val != 0)\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  while (true) {\n    case tok::percent:\n      if (RHS.Val != 0)\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"]={
[i]="\'...\' is not followed by a macro parameter",
[c]="\'...\' is not followed by a macro parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'%select{#|#@}0\' is not followed by a macro parameter",
[g]="\'%select{#|#@}0\' is not followed by a macro parameter",
[g]=n,
[i]=l,
[h]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[j]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{D,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\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        } else {\n          Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}},
[k]={{H,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\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        } else {\n          Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}},
[o]={
[o]={
["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 493: Line 512:
},
},
["err_pp_through_header_not_found"]={
["err_pp_through_header_not_found"]={
[i]="\'A\' required for precompiled header not found",
[c]="\'A\' required for precompiled header not found",
[d]="fatal error: ",
[d]="fatal error: ",
[e]="Fatal",
[f]="Fatal",
[f]="\'%0\' required for precompiled header not found",
[g]="\'%0\' required for precompiled header not found",
[g]="fatal error\\: ",
[i]="fatal error\\: ",
[h]="\'(.*?)\' required for precompiled header not found",
[j]="\'(.*?)\' required for precompiled header not found",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[e]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[k]={{"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  if (!PPOpts->PCHThroughHeader.empty()) {\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
[k]={{"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  if (!PPOpts->PCHThroughHeader.empty()) {\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"]={
[i]="#include of \'A\' not seen while attempting to ... precompiled header",
[c]="#include of \'A\' not seen while attempting to ... precompiled header",
[d]="fatal error: ",
[d]="fatal error: ",
[e]="Fatal",
[f]="Fatal",
[f]="#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header",
[g]="#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header",
[g]="fatal error\\: ",
[i]="fatal error\\: ",
[h]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[j]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[e]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\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  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
[k]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\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  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"]={
[i]="\'#pragma unsafe_buffer_usage\' was not ended",
[c]="\'#pragma unsafe_buffer_usage\' was not ended",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma unsafe_buffer_usage\' was not ended",
[g]="\'#pragma unsafe_buffer_usage\' was not ended",
[g]=n,
[i]=l,
[h]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[j]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}},
[o]={
[o]={
Line 532: Line 551:
},
},
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
[i]="not currently inside \'#pragma unsafe_buffer_usage\'",
[c]="not currently inside \'#pragma unsafe_buffer_usage\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="not currently inside \'#pragma unsafe_buffer_usage\'",
[g]="not currently inside \'#pragma unsafe_buffer_usage\'",
[g]=n,
[i]=l,
[h]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[j]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{K,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (II->isStr(\"begin\")) {\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);"}},
[k]={{Q,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (II->isStr(\"begin\")) {\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);"}},
[o]={
[o]={
["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 547: Line 566:
},
},
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
[i]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[c]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[g]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[g]=n,
[i]=l,
[h]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[j]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[e]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their"},
[k]={{K,1906,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\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);"}},
[k]={{Q,1906,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\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);"}},
[o]={
[o]={
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"}
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"}
Line 562: Line 581:
},
},
["err_pp_unmatched_end_of_assume_nonnull"]={
["err_pp_unmatched_end_of_assume_nonnull"]={
[i]="not currently inside \'#pragma clang assume_nonnull\'",
[c]="not currently inside \'#pragma clang assume_nonnull\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="not currently inside \'#pragma clang assume_nonnull\'",
[g]="not currently inside \'#pragma clang assume_nonnull\'",
[g]=n,
[i]=l,
[h]="not currently inside \'\\#pragma clang assume_nonnull\'",
[j]="not currently inside \'\\#pragma clang assume_nonnull\'",
[b]=a,
[b]=a,
[j]="Nullability Issue",
[h]="Nullability Issue",
[c]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions."},
[e]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions."},
[k]={{K,1964,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\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);"}}
[k]={{Q,1964,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\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"]={
[i]="unterminated conditional directive",
[c]="unterminated conditional directive",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unterminated conditional directive",
[g]="unterminated conditional directive",
[g]=n,
[i]=l,
[h]="unterminated conditional directive",
[j]="unterminated conditional directive",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{"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  // 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);"}},
[k]={{"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  // 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);"}},
[o]={
[o]={
Line 589: Line 608:
},
},
["err_pp_used_poisoned_id"]={
["err_pp_used_poisoned_id"]={
[i]="attempt to use a poisoned identifier",
[c]="attempt to use a poisoned identifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="attempt to use a poisoned identifier",
[g]="attempt to use a poisoned identifier",
[g]=n,
[i]=l,
[h]="attempt to use a poisoned identifier",
[j]="attempt to use a poisoned identifier",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}},
[k]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}},
[o]={
[o]={
Line 604: Line 623:
},
},
["err_pp_vaopt_nested_use"]={
["err_pp_vaopt_nested_use"]={
[i]="__VA_OPT__ cannot be nested within its own replacement tokens",
[c]="__VA_OPT__ cannot be nested within its own replacement tokens",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__VA_OPT__ cannot be nested within its own replacement tokens",
[g]="__VA_OPT__ cannot be nested within its own replacement tokens",
[g]=n,
[i]=l,
[h]="__VA_OPT__ cannot be nested within its own replacement tokens",
[j]="__VA_OPT__ cannot be nested within its own replacement tokens",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[e]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[k]={{D,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\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);"}},
[k]={{H,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\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);"}},
[o]={
[o]={
["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 619: Line 638:
},
},
["err_pp_visibility_non_macro"]={
["err_pp_visibility_non_macro"]={
[i]="no macro named A",
[c]="no macro named A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no macro named %0",
[g]="no macro named %0",
[g]=n,
[i]=l,
[h]="no macro named (.*?)",
[j]="no macro named (.*?)",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly"},
[e]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly"},
[k]={{D,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{D,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{K,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  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{K,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///  #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
[k]={{H,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\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,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{Q,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  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{Q,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///  #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
[o]={
[o]={
["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 634: Line 653:
},
},
["err_ppc_builtin_requires_abi"]={
["err_ppc_builtin_requires_abi"]={
[i]="this builtin requires ABI -mabi=A",
[c]="this builtin requires ABI -mabi=A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="this builtin requires ABI -mabi=%0",
[g]="this builtin requires ABI -mabi=%0",
[g]=n,
[i]=l,
[h]="this builtin requires ABI \\-mabi\\=(.*?)",
[j]="this builtin requires ABI \\-mabi\\=(.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Fb,1616787805,Gb},
[e]={Yb,1616787805,mb,mb},
[k]={{w,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\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\";"}}
[k]={{w,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\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"]={
[i]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[c]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[g]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[g]=n,
[i]=l,
[h]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[j]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={yb,1615397021,zb},
[e]={ac,1615397021,hb,hb},
[k]={{w,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_test_data_class: {\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);"}},
[k]={{w,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_test_data_class: {\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);"}},
[o]={
[o]={
Line 661: Line 680:
},
},
["err_ppc_invalid_use_mma_type"]={
["err_ppc_invalid_use_mma_type"]={
[i]="invalid use of PPC MMA type",
[c]="invalid use of PPC MMA type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid use of PPC MMA type",
[g]="invalid use of PPC MMA type",
[g]=n,
[i]=l,
[h]="invalid use of PPC MMA type",
[j]="invalid use of PPC MMA type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{w,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}},
[k]={{w,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}},
[o]={
[o]={
Line 676: Line 695:
},
},
["err_pragma_alloc_text_c_linkage"]={
["err_pragma_alloc_text_c_linkage"]={
[i]="\'#pragma alloc_text\' is applicable only to functions with C linkage",
[c]="\'#pragma alloc_text\' is applicable only to functions with C linkage",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma alloc_text\' is applicable only to functions with C linkage",
[g]="\'#pragma alloc_text\' is applicable only to functions with C linkage",
[g]=n,
[i]=l,
[h]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[j]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[e]={"cb08f4aa4467",1620530452,Ab,Ab},
[k]={{C,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  for (auto &Function : Functions) {\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}},
[k]={{G,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  for (auto &Function : Functions) {\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}},
[o]={
[o]={
["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 691: Line 710:
},
},
["err_pragma_alloc_text_not_function"]={
["err_pragma_alloc_text_not_function"]={
[i]="\'#pragma alloc_text\' is applicable only to functions",
[c]="\'#pragma alloc_text\' is applicable only to functions",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma alloc_text\' is applicable only to functions",
[g]="\'#pragma alloc_text\' is applicable only to functions",
[g]=n,
[i]=l,
[h]="\'\\#pragma alloc_text\' is applicable only to functions",
[j]="\'\\#pragma alloc_text\' is applicable only to functions",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{C,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  for (auto &Function : Functions) {\n    if (!FD) {\n      Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
[k]={{G,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  for (auto &Function : Functions) {\n    if (!FD) {\n      Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
[o]={
[o]={
["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 706: Line 725:
},
},
["err_pragma_attr_attr_no_push"]={
["err_pragma_attr_attr_no_push"]={
[i]="\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'",
[c]="\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'",
[g]="\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'",
[g]=n,
[i]=l,
[h]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[j]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[e]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute"},
[k]={{C,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}},
[k]={{G,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}},
[o]={
[o]={
["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 721: Line 740:
},
},
["err_pragma_attribute_duplicate_subject"]={
["err_pragma_attribute_duplicate_subject"]={
[i]="duplicate attribute subject matcher \'A\'",
[c]="duplicate attribute subject matcher \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="duplicate attribute subject matcher \'%0\'",
[g]="duplicate attribute subject matcher \'%0\'",
[g]=n,
[i]=l,
[h]="duplicate attribute subject matcher \'(.*?)\'",
[j]="duplicate attribute subject matcher \'(.*?)\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\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));"},{x,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\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));"}},
[k]={{x,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\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));"},{x,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\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));"}},
[o]={
[o]={
[W]={"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))\'"}
[Z]={"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"]={
[i]="expected an attribute after \'(\'",
[c]="expected an attribute after \'(\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected an attribute after \'(\'",
[g]="expected an attribute after \'(\'",
[g]=n,
[i]=l,
[h]="expected an attribute after \'\\(\'",
[j]="expected an attribute after \'\\(\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,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  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}},
[k]={{x,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  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}},
[o]={
[o]={
[W]={"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 \'(\'"}
[Z]={"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"]={
[i]="expected identifier that represents an attribute name",
[c]="expected identifier that represents an attribute name",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected identifier that represents an attribute name",
[g]="expected identifier that represents an attribute name",
[g]=n,
[i]=l,
[h]="expected identifier that represents an attribute name",
[j]="expected identifier that represents an attribute name",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1847,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\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);"}},
[k]={{x,1847,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\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);"}},
[o]={
[o]={
[W]={"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"}
[Z]={"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"]={
[i]="expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax",
[c]="expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax",
[g]="expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax",
[g]=n,
[i]=l,
[h]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[j]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1872,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}},
[k]={{x,1872,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}},
[o]={
[o]={
[W]={"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"}
[Z]={"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"]={
[i]="expected \'.\' after pragma attribute namespace A",
[c]="expected \'.\' after pragma attribute namespace A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected \'.\' after pragma attribute namespace %0",
[g]="expected \'.\' after pragma attribute namespace %0",
[g]=n,
[i]=l,
[h]="expected \'\\.\' after pragma attribute namespace (.*?)",
[j]="expected \'\\.\' after pragma attribute namespace (.*?)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[e]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"},
[k]={{x,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  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}},
[k]={{x,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  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}},
[o]={
[o]={
[W]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"}
[Z]={"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"]={
[i]="expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'",
[c]="expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'",
[g]="expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'",
[g]=n,
[i]=l,
[h]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[j]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[e]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute"},
[k]={{x,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  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}},
[k]={{x,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  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}},
[o]={
[o]={
[W]={"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\'"}
[Z]={"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"]={
[i]="expected an identifier that corresponds to an attribute subject rule",
[c]="expected an identifier that corresponds to an attribute subject rule",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected an identifier that corresponds to an attribute subject rule",
[g]="expected an identifier that corresponds to an attribute subject rule",
[g]=n,
[i]=l,
[h]="expected an identifier that corresponds to an attribute subject rule",
[j]="expected an identifier that corresponds to an attribute subject rule",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (Name.empty()) {\n      Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}},
[k]={{x,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (Name.empty()) {\n      Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}},
[o]={
[o]={
[W]={"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"}
[Z]={"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"]={
[i]="expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ...",
[c]="expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="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",
[g]="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",
[g]=n,
[i]=l,
[h]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[j]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,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;"}},
[k]={{x,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;"}},
[o]={
[o]={
[W]={"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"}
[Z]={"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"]={
[i]="extra tokens after attribute in a \'#pragma clang attribute push\'",
[c]="extra tokens after attribute in a \'#pragma clang attribute push\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="extra tokens after attribute in a \'#pragma clang attribute push\'",
[g]="extra tokens after attribute in a \'#pragma clang attribute push\'",
[g]=n,
[i]=l,
[h]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[j]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1957,"void Parser::HandlePragmaAttribute() {\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);"}},
[k]={{x,1957,"void Parser::HandlePragmaAttribute() {\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);"}},
[o]={
[o]={
[W]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"}
[Z]={"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"]={
[i]="unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'",
[c]="unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'",
[g]="unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'",
[g]=n,
[i]=l,
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[j]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,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  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  } else {\n    if (II->isStr(\"push\"))\n    else if (II->isStr(\"pop\"))\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
[k]={{x,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  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  } else {\n    if (II->isStr(\"push\"))\n    else if (II->isStr(\"pop\"))\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"]={
[i]="attribute A can\'t be applied to B",
[c]="attribute A can\'t be applied to B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="attribute %0 can\'t be applied to %1",
[g]="attribute %0 can\'t be applied to %1",
[g]=n,
[i]=l,
[h]="attribute (.*?) can\'t be applied to (.*?)",
[j]="attribute (.*?) can\'t be applied to (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{C,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}},
[k]={{G,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}},
[o]={
[o]={
[W]={"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))\'"}
[Z]={"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"]={
[i]="expected attribute subject set specifier \'apply_to\'",
[c]="expected attribute subject set specifier \'apply_to\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected attribute subject set specifier \'apply_to\'",
[g]="expected attribute subject set specifier \'apply_to\'",
[g]=n,
[i]=l,
[h]="expected attribute subject set specifier \'apply_to\'",
[j]="expected attribute subject set specifier \'apply_to\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1922,"void Parser::HandlePragmaAttribute() {\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{x,1930,"void Parser::HandlePragmaAttribute() {\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
[k]={{x,1922,"void Parser::HandlePragmaAttribute() {\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{x,1930,"void Parser::HandlePragmaAttribute() {\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
[o]={
[o]={
[W]={"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\'"}
[Z]={"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"]={
[i]="negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'",
[c]="negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'",
[g]="negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'",
[g]=n,
[i]=l,
[h]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[j]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{C,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    for (const auto &Rule : Rules) {\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\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));"}},
[k]={{G,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    for (const auto &Rule : Rules) {\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\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));"}},
[o]={
[o]={
["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 913: Line 932:
},
},
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
[i]="redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations",
[c]="redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations",
[g]="redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations",
[g]=n,
[i]=l,
[h]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[j]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{C,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    for (const auto &Rule : Rules) {\n      if (It != Rules.end()) {\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));"}},
[k]={{G,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    for (const auto &Rule : Rules) {\n      if (It != Rules.end()) {\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));"}},
[o]={
[o]={
["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 928: Line 947:
},
},
["err_pragma_attribute_namespace_on_attribute"]={
["err_pragma_attribute_namespace_on_attribute"]={
[i]="namespace can only apply to \'push\' or \'pop\' directives",
[c]="namespace can only apply to \'push\' or \'pop\' directives",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="namespace can only apply to \'push\' or \'pop\' directives",
[g]="namespace can only apply to \'push\' or \'pop\' directives",
[g]=n,
[i]=l,
[h]="namespace can only apply to \'push\' or \'pop\' directives",
[j]="namespace can only apply to \'push\' or \'pop\' directives",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[e]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"},
[k]={{x,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  // 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);"}},
[k]={{x,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  // 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);"}},
[o]={
[o]={
Line 943: Line 962:
},
},
["err_pragma_attribute_no_pop_eof"]={
["err_pragma_attribute_no_pop_eof"]={
[i]="unterminated \'#pragma clang attribute push\' at end of file",
[c]="unterminated \'#pragma clang attribute push\' at end of file",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unterminated \'#pragma clang attribute push\' at end of file",
[g]="unterminated \'#pragma clang attribute push\' at end of file",
[g]=n,
[i]=l,
[h]="unterminated \'\\#pragma clang attribute push\' at end of file",
[j]="unterminated \'\\#pragma clang attribute push\' at end of file",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{C,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
[k]={{G,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
[o]={
[o]={
["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 958: Line 977:
},
},
["err_pragma_attribute_stack_mismatch"]={
["err_pragma_attribute_stack_mismatch"]={
[i]="\'#pragma clang attribute ...pop\' with no matching \'#pragma clang attribute ...push\'",
[c]="\'#pragma clang attribute ...pop\' with no matching \'#pragma clang attribute ...push\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'",
[g]="\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'",
[g]=n,
[i]=l,
[h]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[j]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{C,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{C,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{C,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}},
[k]={{G,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{G,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{G,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}},
[o]={
[o]={
["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 973: Line 992:
},
},
["err_pragma_attribute_unknown_subject_rule"]={
["err_pragma_attribute_unknown_subject_rule"]={
[i]="unknown attribute subject rule \'A\'",
[c]="unknown attribute subject rule \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unknown attribute subject rule \'%0\'",
[g]="unknown attribute subject rule \'%0\'",
[g]=n,
[i]=l,
[h]="unknown attribute subject rule \'(.*?)\'",
[j]="unknown attribute subject rule \'(.*?)\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (!Rule.first) {\n      Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}},
[k]={{x,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (!Rule.first) {\n      Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}},
[o]={
[o]={
[W]={"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\'"}
[Z]={"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"]={
[i]="... attribute subject matcher sub-rule \'A\'; \'B\' matcher ...",
[c]="... attribute subject matcher sub-rule \'A\'; \'B\' matcher ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%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",
[g]="%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",
[g]=n,
[i]=l,
[h]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[j]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,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;"}},
[k]={{x,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;"}},
[o]={
[o]={
[W]={"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"}
[Z]={"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"]={
[i]="attribute A is not supported by \'#pragma clang attribute\'",
[c]="attribute A is not supported by \'#pragma clang attribute\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="attribute %0 is not supported by \'#pragma clang attribute\'",
[g]="attribute %0 is not supported by \'#pragma clang attribute\'",
[g]=n,
[i]=l,
[h]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[j]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={P,1492508507,R},
[e]={U,1492508507,C,C},
[k]={{x,1903,"void Parser::HandlePragmaAttribute() {\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}},
[k]={{x,1903,"void Parser::HandlePragmaAttribute() {\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}},
[o]={
[o]={
Line 1,018: Line 1,037:
},
},
["err_pragma_cannot_end_force_cuda_host_device"]={
["err_pragma_cannot_end_force_cuda_host_device"]={
[i]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[c]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[g]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[g]=n,
[i]=l,
[h]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[j]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."},
[e]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."},
[k]={{x,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Info->isStr(\"begin\"))\n  else if (!Actions.PopForceCUDAHostDevice())\n    PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}}
[k]={{x,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Info->isStr(\"begin\"))\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"]={
[i]="expected \'=\' following \'#pragma clang section ...\'",
[c]="expected \'=\' following \'#pragma clang section ...\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'",
[g]="expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'",
[g]=n,
[i]=l,
[h]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[j]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[e]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section"},
[k]={{x,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}},
[k]={{x,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}},
[o]={
[o]={
Line 1,045: Line 1,064:
},
},
["err_pragma_comment_malformed"]={
["err_pragma_comment_malformed"]={
[i]="pragma comment requires parenthesized identifier and optional string",
[c]="pragma comment requires parenthesized identifier and optional string",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pragma comment requires parenthesized identifier and optional string",
[g]="pragma comment requires parenthesized identifier and optional string",
[g]=n,
[i]=l,
[h]="pragma comment requires parenthesized identifier and optional string",
[j]="pragma comment requires parenthesized identifier and optional string",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{x,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  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,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  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,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  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{x,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  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}},
[k]={{x,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  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,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  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,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  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{x,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  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}},
[o]={
[o]={
Line 1,060: Line 1,079:
},
},
["err_pragma_comment_unknown_kind"]={
["err_pragma_comment_unknown_kind"]={
[i]="unknown kind of pragma comment",
[c]="unknown kind of pragma comment",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unknown kind of pragma comment",
[g]="unknown kind of pragma comment",
[g]=n,
[i]=l,
[h]="unknown kind of pragma comment",
[j]="unknown kind of pragma comment",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{x,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  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}},
[k]={{x,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  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}},
[o]={
[o]={
Line 1,075: Line 1,094:
},
},
["err_pragma_detect_mismatch_malformed"]={
["err_pragma_detect_mismatch_malformed"]={
[i]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[c]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[g]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[g]=n,
[i]=l,
[h]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[j]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co..."},
[e]={"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."},
[k]={{x,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  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{x,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  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}},
[k]={{x,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  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{x,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  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}},
[o]={
[o]={
Line 1,090: Line 1,109:
},
},
["err_pragma_expected_clang_section_name"]={
["err_pragma_expected_clang_section_name"]={
[i]="expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'",
[c]="expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'",
[g]="expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'",
[g]=n,
[i]=l,
[h]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[j]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[e]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section"},
[k]={{x,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\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\";"},{x,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (SecType->isStr(\"bss\"))\n    else if (SecType->isStr(\"data\"))\n    else if (SecType->isStr(\"rodata\"))\n    else if (SecType->isStr(\"relro\"))\n    else if (SecType->isStr(\"text\"))\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}},
[k]={{x,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\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\";"},{x,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (SecType->isStr(\"bss\"))\n    else if (SecType->isStr(\"data\"))\n    else if (SecType->isStr(\"rodata\"))\n    else if (SecType->isStr(\"relro\"))\n    else if (SecType->isStr(\"text\"))\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}},
[o]={
[o]={
Line 1,105: Line 1,124:
},
},
["err_pragma_expected_file_scope"]={
["err_pragma_expected_file_scope"]={
[i]="\'#pragma A\' can only appear at file scope",
[c]="\'#pragma A\' can only appear at file scope",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma %0\' can only appear at file scope",
[g]="\'#pragma %0\' can only appear at file scope",
[g]=n,
[i]=l,
[h]="\'\\#pragma (.*?)\' can only appear at file scope",
[j]="\'\\#pragma (.*?)\' can only appear at file scope",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[e]={"cb08f4aa4467",1620530452,Ab,Ab},
[k]={{C,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\";"},{C,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{C,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\";"}},
[k]={{G,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\";"},{G,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{G,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\";"}},
[o]={
[o]={
["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 1,120: Line 1,139:
},
},
["err_pragma_expected_integer"]={
["err_pragma_expected_integer"]={
[i]="expected an integer argument in \'#pragma A\'",
[c]="expected an integer argument in \'#pragma A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected an integer argument in \'#pragma %0\'",
[g]="expected an integer argument in \'#pragma %0\'",
[g]=n,
[i]=l,
[h]="expected an integer argument in \'\\#pragma (.*?)\'",
[j]="expected an integer argument in \'\\#pragma (.*?)\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{x,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\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\";"},{x,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\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\";"}},
[k]={{x,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\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\";"},{x,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\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\";"}},
[o]={
[o]={
Line 1,135: Line 1,154:
},
},
["err_pragma_fc_except_requires_precise"]={
["err_pragma_fc_except_requires_precise"]={
[i]="\'#pragma float_control(except, on)\' is illegal when precise is disabled",
[c]="\'#pragma float_control(except, on)\' is illegal when precise is disabled",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma float_control(except, on)\' is illegal when precise is disabled",
[g]="\'#pragma float_control(except, on)\' is illegal when precise is disabled",
[g]=n,
[i]=l,
[h]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[j]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{C,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_Except:\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}}
[k]={{G,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\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"]={
[i]="\'#pragma float_control(precise, off)\' is illegal when except is enabled",
[c]="\'#pragma float_control(precise, off)\' is illegal when except is enabled",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma float_control(precise, off)\' is illegal when except is enabled",
[g]="\'#pragma float_control(precise, off)\' is illegal when except is enabled",
[g]=n,
[i]=l,
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[j]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{C,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
[k]={{G,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
[o]={
[o]={
["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 1,162: Line 1,181:
},
},
["err_pragma_fc_noprecise_requires_nofenv"]={
["err_pragma_fc_noprecise_requires_nofenv"]={
[i]="\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled",
[c]="\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled",
[g]="\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled",
[g]=n,
[i]=l,
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[j]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{C,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n    else if (CurFPFeatures.getAllowFEnvAccess())\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}}
[k]={{G,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\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"]={
[i]="\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification",
[c]="\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification",
[g]="\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification",
[g]=n,
[i]=l,
[h]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[j]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{C,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}},
[k]={{G,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}},
[o]={
[o]={
["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 1,189: Line 1,208:
},
},
["err_pragma_fenv_requires_precise"]={
["err_pragma_fenv_requires_precise"]={
[i]="\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[c]="\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[g]="\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[g]=n,
[i]=l,
[h]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[j]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{C,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\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);"}}
[k]={{G,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\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"]={
[i]="\'#pragma A\' can only appear at file scope or at the start of a compound statement",
[c]="\'#pragma A\' can only appear at file scope or at the start of a compound statement",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'#pragma %0\' can only appear at file scope or at the start of a compound statement",
[g]="\'#pragma %0\' can only appear at file scope or at the start of a compound statement",
[g]=n,
[i]=l,
[h]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[j]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[e]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control"},
[k]={{rb,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp_contract:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{rb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{rb,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_access_ms:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{rb,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_round:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{rb,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_float_control:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}},
[k]={{Jb,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp_contract:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{Jb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{Jb,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_access_ms:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{Jb,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_round:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{Jb,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_float_control:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}},
[o]={
[o]={
["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 1,216: Line 1,235:
},
},
["err_pragma_float_control_malformed"]={
["err_pragma_float_control_malformed"]={
[i]="pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'",
[c]="pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'",
[g]="pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'",
[g]=n,
[i]=l,
[h]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[j]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[e]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control"},
[k]={{x,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  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\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);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (PushOnOff == \"on\")\n      else if (PushOnOff == \"off\") {\n      } else if (PushOnOff == \"push\") {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (ExpectedPush == \"push\") {\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
[k]={{x,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  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\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);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (PushOnOff == \"on\")\n      else if (PushOnOff == \"off\") {\n      } else if (PushOnOff == \"push\") {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (ExpectedPush == \"push\") {\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,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  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
[o]={
[o]={
Line 1,231: Line 1,250:
},
},
["err_pragma_fp_invalid_argument"]={
["err_pragma_fp_invalid_argument"]={
[i]="unexpected argument \'A\' to \'#pragma clang fp B\'; expected ...",
[c]="unexpected argument \'A\' to \'#pragma clang fp B\'; expected ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="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",
[g]="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",
[g]=n,
[i]=l,
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[j]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[e]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp"},
[k]={{x,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\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);"},{x,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}},
[k]={{x,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\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);"},{x,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}},
[o]={
[o]={
Line 1,246: Line 1,265:
},
},
["err_pragma_fp_invalid_option"]={
["err_pragma_fp_invalid_option"]={
[i]="... option...; expected \'contract\', \'reassociate\' or \'exceptions\'",
[c]="... option...; expected \'contract\', \'reassociate\' or \'exceptions\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'",
[g]="%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'",
[g]=n,
[i]=l,
[h]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[j]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[e]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp"},
[k]={{x,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{x,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[k]={{x,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{x,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[o]={
[o]={
Line 1,261: Line 1,280:
},
},
["err_pragma_invalid_keyword"]={
["err_pragma_invalid_keyword"]={
[i]="invalid argument; expected \'enable\'...... or \'disable\'",
[c]="invalid argument; expected \'enable\'...... or \'disable\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[g]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[g]=n,
[i]=l,
[h]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[j]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute."},
[e]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute."},
[k]={{x,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n      } else {\n        Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[k]={{x,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n      } else {\n        Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[o]={
[o]={
Line 1,276: Line 1,295:
},
},
["err_pragma_loop_compatibility"]={
["err_pragma_loop_compatibility"]={
[i]="... directives \'A\' and \'B\'",
[c]="... directives \'A\' and \'B\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[g]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[g]=n,
[i]=l,
[h]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[j]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[e]={"b06b15aa28d0",1402058424,zb,zb},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  for (const auto *I : Attrs) {\n    if (PrevAttr)\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  for (const auto *I : Attrs) {\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  for (const auto *I : Attrs) {\n    if (PrevAttr)\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  for (const auto *I : Attrs) {\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}},
[o]={
[o]={
Line 1,291: Line 1,310:
},
},
["err_pragma_loop_invalid_argument_type"]={
["err_pragma_loop_invalid_argument_type"]={
[i]="invalid argument of type A; expected an integer type",
[c]="invalid argument of type A; expected an integer type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid argument of type %0; expected an integer type",
[g]="invalid argument of type %0; expected an integer type",
[g]=n,
[i]=l,
[h]="invalid argument of type (.*?); expected an integer type",
[j]="invalid argument of type (.*?); expected an integer type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[e]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints."},
[k]={{q,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
[k]={{r,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
[o]={
[o]={
["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 1,306: Line 1,325:
},
},
["err_pragma_loop_invalid_argument_value"]={
["err_pragma_loop_invalid_argument_value"]={
[i]="...",
[c]="...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[g]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[g]=n,
[i]=l,
[h]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[j]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[e]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints."},
[k]={{q,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}},
[k]={{r,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}},
[o]={
[o]={
["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 1,321: Line 1,340:
},
},
["err_pragma_loop_invalid_option"]={
["err_pragma_loop_invalid_option"]={
[i]="... option...; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[c]="... option...; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%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",
[g]="%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",
[g]=n,
[i]=l,
[h]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[j]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[e]={"b06b15aa28d0",1402058424,zb,zb},
[k]={{x,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  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{x,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  while (Tok.is(tok::identifier)) {\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[k]={{x,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  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{x,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  while (Tok.is(tok::identifier)) {\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[o]={
[o]={
Line 1,336: Line 1,355:
},
},
["err_pragma_loop_invalid_vectorize_option"]={
["err_pragma_loop_invalid_vectorize_option"]={
[i]="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\')",
[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\')",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')",
[g]="vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')",
[g]=n,
[i]=l,
[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\'\\)",
[j]="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\'\\)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[e]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[k]={{x,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n          Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
[k]={{x,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (Tok.is(tok::comma)) {\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"]={
[i]="missing argument; expected ...",
[c]="missing argument; expected ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[g]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[g]=n,
[i]=l,
[h]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[j]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"},
[e]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE"},
[k]={{x,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[k]={{x,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[o]={
[o]={
Line 1,363: Line 1,382:
},
},
["err_pragma_loop_precedes_nonloop"]={
["err_pragma_loop_precedes_nonloop"]={
[i]="expected a for, while, or do-while loop to follow \'A\'",
[c]="expected a for, while, or do-while loop to follow \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected a for, while, or do-while loop to follow \'%0\'",
[g]="expected a for, while, or do-while loop to follow \'%0\'",
[g]=n,
[i]=l,
[h]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[j]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[e]={"b06b15aa28d0",1402058424,zb,zb},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\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    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\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    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}},
[o]={
[o]={
Line 1,378: Line 1,397:
},
},
["err_pragma_message_malformed"]={
["err_pragma_message_malformed"]={
[i]="pragma ... requires parenthesized string",
[c]="pragma ... requires parenthesized string",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pragma %select{message|warning|error}0 requires parenthesized string",
[g]="pragma %select{message|warning|error}0 requires parenthesized string",
[g]=n,
[i]=l,
[h]="pragma (?:message|warning|error) requires parenthesized string",
[j]="pragma (?:message|warning|error) requires parenthesized string",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"},
[e]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!"},
[k]={{K,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{K,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{K,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}},
[k]={{Q,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{Q,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{Q,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  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}},
[o]={
[o]={
["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 1,393: Line 1,412:
},
},
["err_pragma_misplaced_in_decl"]={
["err_pragma_misplaced_in_decl"]={
[i]="this pragma cannot appear in A declaration",
[c]="this pragma cannot appear in A declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="this pragma cannot appear in %0 declaration",
[g]="this pragma cannot appear in %0 declaration",
[g]=n,
[i]=l,
[h]="this pragma cannot appear in (.*?) declaration",
[j]="this pragma cannot appear in (.*?) declaration",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"},
[e]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma"},
[k]={{T,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  // 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    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{eb,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}},
[k]={{Y,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  // 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    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{jb,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}},
[o]={
[o]={
["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 1,408: Line 1,427:
},
},
["err_pragma_missing_argument"]={
["err_pragma_missing_argument"]={
[i]="missing argument to \'#pragma A\'...",
[c]="missing argument to \'#pragma A\'...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[g]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[g]=n,
[i]=l,
[h]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[j]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."},
[e]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'."},
[k]={{x,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{x,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{x,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}},
[k]={{x,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{x,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{x,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}},
[o]={
[o]={
Line 1,423: Line 1,442:
},
},
["err_pragma_optimize_extra_argument"]={
["err_pragma_optimize_extra_argument"]={
[i]="unexpected extra argument \'A\' to \'#pragma clang optimize\'",
[c]="unexpected extra argument \'A\' to \'#pragma clang optimize\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[g]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[g]=n,
[i]=l,
[h]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[j]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[e]={"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\'."},
[k]={{x,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
[k]={{x,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
[o]={
[o]={
Line 1,438: Line 1,457:
},
},
["err_pragma_optimize_invalid_argument"]={
["err_pragma_optimize_invalid_argument"]={
[i]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[c]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[g]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[g]=n,
[i]=l,
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[j]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[e]={"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\'."},
[k]={{x,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{x,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (II->isStr(\"on\")) {\n  } else if (!II->isStr(\"off\")) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
[k]={{x,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{x,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (II->isStr(\"on\")) {\n  } else if (!II->isStr(\"off\")) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
[o]={
[o]={
Line 1,453: Line 1,472:
},
},
["err_pragma_options_align_mac68k_target_unsupported"]={
["err_pragma_options_align_mac68k_target_unsupported"]={
[i]="mac68k alignment pragma is not supported on this target",
[c]="mac68k alignment pragma is not supported on this target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="mac68k alignment pragma is not supported on this target",
[g]="mac68k alignment pragma is not supported on this target",
[g]=n,
[i]=l,
[h]="mac68k alignment pragma is not supported on this target",
[j]="mac68k alignment pragma is not supported on this target",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."},
[e]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."},
[k]={{C,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\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);"}},
[k]={{G,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\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);"}},
[o]={
[o]={
["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 1,468: Line 1,487:
},
},
["err_pragma_pack_identifer_not_supported"]={
["err_pragma_pack_identifer_not_supported"]={
[i]="specifying an identifier within `#pragma pack` is not supported on this target",
[c]="specifying an identifier within `#pragma pack` is not supported on this target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="specifying an identifier within `#pragma pack` is not supported on this target",
[g]="specifying an identifier within `#pragma pack` is not supported on this target",
[g]=n,
[i]=l,
[h]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[j]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{C,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // XL pragma pack does not support identifier syntax.\n  if (IsXLPragma && !SlotLabel.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}},
[k]={{G,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // XL pragma pack does not support identifier syntax.\n  if (IsXLPragma && !SlotLabel.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}},
[o]={
[o]={
["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 1,483: Line 1,502:
},
},
["err_pragma_pack_invalid_alignment"]={
["err_pragma_pack_invalid_alignment"]={
[i]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[c]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[g]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[g]=n,
[i]=l,
[h]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[j]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{C,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  if (Alignment) {\n    if (IsXLPragma && *Val == 0) {\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}},
[k]={{G,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  if (Alignment) {\n    if (IsXLPragma && *Val == 0) {\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}},
[o]={
[o]={
["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 1,498: Line 1,517:
},
},
["err_pragma_pipeline_invalid_keyword"]={
["err_pragma_pipeline_invalid_keyword"]={
[i]="invalid argument; expected \'disable\'",
[c]="invalid argument; expected \'disable\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid argument; expected \'disable\'",
[g]="invalid argument; expected \'disable\'",
[g]=n,
[i]=l,
[h]="invalid argument; expected \'disable\'",
[j]="invalid argument; expected \'disable\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations."},
[e]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations."},
[k]={{x,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}},
[k]={{x,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}},
[o]={
[o]={
Line 1,513: Line 1,532:
},
},
["err_pragma_pointers_to_members_unknown_kind"]={
["err_pragma_pointers_to_members_unknown_kind"]={
[i]="unexpected A, expected to see one of ...\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[c]="unexpected A, expected to see one of ...\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[g]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[g]=n,
[i]=l,
[h]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[j]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members"},
[e]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members"},
[k]={{x,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  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{x,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  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n      } else if (Arg->isStr(\"multiple_inheritance\")) {\n      } else if (Arg->isStr(\"virtual_inheritance\")) {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}},
[k]={{x,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  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{x,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  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n      } else if (Arg->isStr(\"multiple_inheritance\")) {\n      } else if (Arg->isStr(\"virtual_inheritance\")) {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}},
[o]={
[o]={
Line 1,528: Line 1,547:
},
},
["err_pragma_pop_visibility_mismatch"]={
["err_pragma_pop_visibility_mismatch"]={
[i]="#pragma visibility pop with no matching #pragma visibility push",
[c]="#pragma visibility pop with no matching #pragma visibility push",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="#pragma visibility pop with no matching #pragma visibility push",
[g]="#pragma visibility pop with no matching #pragma visibility push",
[g]=n,
[i]=l,
[h]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[j]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[e]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[k]={{C,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{C,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}},
[k]={{G,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{G,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}},
[o]={
[o]={
["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 1,543: Line 1,562:
},
},
["err_pragma_push_pop_macro_malformed"]={
["err_pragma_push_pop_macro_malformed"]={
[i]="pragma A requires a parenthesized string",
[c]="pragma A requires a parenthesized string",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pragma %0 requires a parenthesized string",
[g]="pragma %0 requires a parenthesized string",
[g]=n,
[i]=l,
[h]="pragma (.*?) requires a parenthesized string",
[j]="pragma (.*?) requires a parenthesized string",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"},
[e]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!"},
[k]={{K,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  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{K,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  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{K,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  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}}
[k]={{Q,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  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{Q,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  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{Q,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  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"]={
[i]="#pragma visibility push with no matching #pragma visibility pop",
[c]="#pragma visibility push with no matching #pragma visibility pop",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="#pragma visibility push with no matching #pragma visibility pop",
[g]="#pragma visibility push with no matching #pragma visibility pop",
[g]=n,
[i]=l,
[h]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[j]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[e]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[k]={{C,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
[k]={{G,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
[o]={
[o]={
["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 1,570: Line 1,589:
},
},
["err_pragma_section_invalid_for_target"]={
["err_pragma_section_invalid_for_target"]={
[i]="argument to #pragma section is not valid for this target: A",
[c]="argument to #pragma section is not valid for this target: A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="argument to #pragma section is not valid for this target: %0",
[g]="argument to #pragma section is not valid for this target: %0",
[g]=n,
[i]=l,
[h]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[j]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{C,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}},
[k]={{G,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}},
[o]={
[o]={
["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 1,585: Line 1,604:
},
},
["err_preserve_enum_value_invalid"]={
["err_preserve_enum_value_invalid"]={
[i]="__builtin_preserve_enum_value argument A invalid",
[c]="__builtin_preserve_enum_value argument A invalid",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__builtin_preserve_enum_value argument %0 invalid",
[g]="__builtin_preserve_enum_value argument %0 invalid",
[g]=n,
[i]=l,
[h]="__builtin_preserve_enum_value argument (.*?) invalid",
[j]="__builtin_preserve_enum_value argument (.*?) invalid",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      kind = diag::err_preserve_enum_value_invalid;"}},
[k]={{w,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      kind = diag::err_preserve_enum_value_invalid;"}},
[o]={
[o]={
Line 1,600: Line 1,619:
},
},
["err_preserve_enum_value_not_const"]={
["err_preserve_enum_value_not_const"]={
[i]="__builtin_preserve_enum_value argument A not a constant",
[c]="__builtin_preserve_enum_value argument A not a constant",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__builtin_preserve_enum_value argument %0 not a constant",
[g]="__builtin_preserve_enum_value argument %0 not a constant",
[g]=n,
[i]=l,
[h]="__builtin_preserve_enum_value argument (.*?) not a constant",
[j]="__builtin_preserve_enum_value argument (.*?) not a constant",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
[k]={{w,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
},
},
["err_preserve_field_info_not_const"]={
["err_preserve_field_info_not_const"]={
[i]="__builtin_preserve_field_info argument A not a constant",
[c]="__builtin_preserve_field_info argument A not a constant",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__builtin_preserve_field_info argument %0 not a constant",
[g]="__builtin_preserve_field_info argument %0 not a constant",
[g]=n,
[i]=l,
[h]="__builtin_preserve_field_info argument (.*?) not a constant",
[j]="__builtin_preserve_field_info argument (.*?) not a constant",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[e]={"7c11da0cfd33",1567434909,vb,vb},
[k]={{w,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}},
[k]={{w,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}},
[o]={
[o]={
Line 1,627: Line 1,646:
},
},
["err_preserve_field_info_not_field"]={
["err_preserve_field_info_not_field"]={
[i]="__builtin_preserve_field_info argument A not a field access",
[c]="__builtin_preserve_field_info argument A not a field access",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__builtin_preserve_field_info argument %0 not a field access",
[g]="__builtin_preserve_field_info argument %0 not a field access",
[g]=n,
[i]=l,
[h]="__builtin_preserve_field_info argument (.*?) not a field access",
[j]="__builtin_preserve_field_info argument (.*?) not a field access",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[e]={"7c11da0cfd33",1567434909,vb,vb},
[k]={{w,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      kind = diag::err_preserve_field_info_not_field;"}},
[k]={{w,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      kind = diag::err_preserve_field_info_not_field;"}},
[o]={
[o]={
Line 1,642: Line 1,661:
},
},
["err_preserve_type_info_invalid"]={
["err_preserve_type_info_invalid"]={
[i]="__builtin_preserve_type_info argument A invalid",
[c]="__builtin_preserve_type_info argument A invalid",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__builtin_preserve_type_info argument %0 invalid",
[g]="__builtin_preserve_type_info argument %0 invalid",
[g]=n,
[i]=l,
[h]="__builtin_preserve_type_info argument (.*?) invalid",
[j]="__builtin_preserve_type_info argument (.*?) invalid",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n    if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n      kind = diag::err_preserve_type_info_invalid;"}},
[k]={{w,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n    if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n      kind = diag::err_preserve_type_info_invalid;"}},
[o]={
[o]={
Line 1,657: Line 1,676:
},
},
["err_preserve_type_info_not_const"]={
["err_preserve_type_info_not_const"]={
[i]="__builtin_preserve_type_info argument A not a constant",
[c]="__builtin_preserve_type_info argument A not a constant",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="__builtin_preserve_type_info argument %0 not a constant",
[g]="__builtin_preserve_type_info argument %0 not a constant",
[g]=n,
[i]=l,
[h]="__builtin_preserve_type_info argument (.*?) not a constant",
[j]="__builtin_preserve_type_info argument (.*?) not a constant",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n      kind = diag::err_preserve_type_info_not_const;"}}
[k]={{w,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\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"]={
[i]="instance variable A is private",
[c]="instance variable A is private",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="instance variable %0 is private",
[g]="instance variable %0 is private",
[g]=n,
[i]=l,
[h]="instance variable (.*?) is private",
[j]="instance variable (.*?) is private",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{q,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  if (LookForIvars) {\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\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();"},{J,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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\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();"}},
[k]={{r,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  if (LookForIvars) {\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\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();"},{P,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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\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();"}},
[o]={
[o]={
["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 1,684: Line 1,703:
},
},
["err_private_module_fragment_expected_semi"]={
["err_private_module_fragment_expected_semi"]={
[i]="expected \';\' after private module fragment declaration",
[c]="expected \';\' after private module fragment declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected \';\' after private module fragment declaration",
[g]="expected \';\' after private module fragment declaration",
[g]=n,
[i]=l,
[h]="expected \';\' after private module fragment declaration",
[j]="expected \';\' after private module fragment declaration",
[b]=a,
[b]=a,
[j]="Modules Issue",
[h]="Modules Issue",
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[e]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,"},
[k]={{cb,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  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
[k]={{kb,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  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
},
},
["err_private_module_fragment_not_module"]={
["err_private_module_fragment_not_module"]={
[i]="private module fragment declaration with no preceding module declaration",
[c]="private module fragment declaration with no preceding module declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="private module fragment declaration with no preceding module declaration",
[g]="private module fragment declaration with no preceding module declaration",
[g]=n,
[i]=l,
[h]="private module fragment declaration with no preceding module declaration",
[j]="private module fragment declaration with no preceding module declaration",
[b]=a,
[b]=a,
[j]="Modules Issue",
[h]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[e]={"a5bbbfef156c",1555621974,Hb,Hb},
[k]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}},
[k]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}},
[o]={
[o]={
Line 1,711: Line 1,730:
},
},
["err_private_module_fragment_not_module_interface"]={
["err_private_module_fragment_not_module_interface"]={
[i]="private module fragment in module implementation unit",
[c]="private module fragment in module implementation unit",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="private module fragment in module implementation unit",
[g]="private module fragment in module implementation unit",
[g]=n,
[i]=l,
[h]="private module fragment in module implementation unit",
[j]="private module fragment in module implementation unit",
[b]=a,
[b]=a,
[j]="Modules Issue",
[h]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[e]={"a5bbbfef156c",1555621974,Hb,Hb},
[k]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}},
[k]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}},
[o]={
[o]={
Line 1,726: Line 1,745:
},
},
["err_private_module_fragment_redefined"]={
["err_private_module_fragment_redefined"]={
[i]="private module fragment redefined",
[c]="private module fragment redefined",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="private module fragment redefined",
[g]="private module fragment redefined",
[g]=n,
[i]=l,
[h]="private module fragment redefined",
[j]="private module fragment redefined",
[b]=a,
[b]=a,
[j]="Modules Issue",
[h]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[e]={"a5bbbfef156c",1555621974,Hb,Hb},
[k]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
[k]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
[o]={
[o]={
Line 1,741: Line 1,760:
},
},
["err_probability_not_constant_float"]={
["err_probability_not_constant_float"]={
[i]="probability argument to __builtin_expect_with_probability must be constant floating-point expression",
[c]="probability argument to __builtin_expect_with_probability must be constant floating-point expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="probability argument to __builtin_expect_with_probability must be constant floating-point expression",
[g]="probability argument to __builtin_expect_with_probability must be constant floating-point expression",
[g]=n,
[i]=l,
[h]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[j]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,2441,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_expect_with_probability: {\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}},
[k]={{w,2441,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_expect_with_probability: {\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}},
[o]={
[o]={
Line 1,756: Line 1,775:
},
},
["err_probability_out_of_range"]={
["err_probability_out_of_range"]={
[i]="probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]",
[c]="probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]",
[g]="probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]",
[g]=n,
[i]=l,
[h]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[j]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,2453,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_expect_with_probability: {\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}},
[k]={{w,2453,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_expect_with_probability: {\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}},
[o]={
[o]={
Line 1,771: Line 1,790:
},
},
["err_property_accessor_type"]={
["err_property_accessor_type"]={
[i]="type of property A (B) does not match type of accessor C (D)",
[c]="type of property A (B) does not match type of accessor C (D)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[g]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[g]=n,
[i]=l,
[h]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[j]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{S,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}},
[k]={{W,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}},
[o]={
[o]={
["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 1,786: Line 1,805:
},
},
["err_property_found_suggest"]={
["err_property_found_suggest"]={
[i]="property A found on object of type B; did you mean to access it with the \".\" operator?",
[c]="property A found on object of type B; did you mean to access it with the \".\" operator?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[g]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[g]=n,
[i]=l,
[h]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[j]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."},
[e]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."},
[k]={{J,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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\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, \".\");"}},
[k]={{P,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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\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, \".\");"}},
[o]={
[o]={
["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 1,801: Line 1,820:
},
},
["err_property_function_in_objc_container"]={
["err_property_function_in_objc_container"]={
[i]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[c]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[g]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[g]=n,
[i]=l,
[h]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[j]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, "},
[e]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, ","Objective-C. Diagnose use of properties in functions nested in, "},
[k]={{"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);"}},
[k]={{"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);"}},
[o]={
[o]={
Line 1,816: Line 1,835:
},
},
["err_property_implemented"]={
["err_property_implemented"]={
[i]="property A is already implemented",
[c]="property A is already implemented",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 is already implemented",
[g]="property %0 is already implemented",
[g]=n,
[i]=l,
[h]="property (.*?) is already implemented",
[j]="property (.*?) is already implemented",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{S,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  if (IC) {\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{S,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  if (IC) {\n  } else {\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}},
[k]={{W,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  if (IC) {\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{W,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  if (IC) {\n  } else {\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}},
[o]={
[o]={
["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 1,831: Line 1,850:
},
},
["err_property_is_variably_modified"]={
["err_property_is_variably_modified"]={
[i]="property A has a variably modified type",
[c]="property A has a variably modified type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 has a variably modified type",
[g]="property %0 has a variably modified type",
[g]=n,
[i]=l,
[h]="property (.*?) has a variably modified type",
[j]="property (.*?) has a variably modified type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and"},
[e]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and","Basic support for Microsoft property declarations and"},
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\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"]={
[i]="type of property A (B) does not match type of instance variable C (D)",
[c]="type of property A (B) does not match type of instance variable C (D)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[g]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[g]=n,
[i]=l,
[h]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[j]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{S,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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{S,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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n      } else {\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
[k]={{W,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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{W,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  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n      } else {\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
[o]={
[o]={
["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 1,858: Line 1,877:
},
},
["err_property_method_unavailable"]={
["err_property_method_unavailable"]={
[i]="property access is using A method which is unavailable",
[c]="property access is using A method which is unavailable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property access is using %0 method which is unavailable",
[g]="property access is using %0 method which is unavailable",
[g]=n,
[i]=l,
[h]="property access is using (.*?) method which is unavailable",
[j]="property access is using (.*?) method which is unavailable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared"},
[e]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared"},
[k]={{"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  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}},
[k]={{"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  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}},
[o]={
[o]={
Line 1,873: Line 1,892:
},
},
["err_property_not_as_forward_class"]={
["err_property_not_as_forward_class"]={
[i]="property A refers to an incomplete Objective-C class B (with no @interface available)",
[c]="property A refers to an incomplete Objective-C class B (with no @interface available)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[g]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[g]=n,
[i]=l,
[h]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[j]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of"},
[e]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of"},
[k]={{fb,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  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n    if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n      if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}},
[k]={{pb,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  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n    if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n      if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}},
[o]={
[o]={
["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 1,888: Line 1,907:
},
},
["err_property_not_found"]={
["err_property_not_found"]={
[i]="property A not found on object of type B",
[c]="property A not found on object of type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 not found on object of type %1",
[g]="property %0 not found on object of type %1",
[g]=n,
[i]=l,
[h]="property (.*?) not found on object of type (.*?)",
[j]="property (.*?) not found on object of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{J,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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{J,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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{fb,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  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{fb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
[k]={{P,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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{P,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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{pb,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  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{pb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
[o]={
[o]={
["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 1,903: Line 1,922:
},
},
["err_property_not_found_forward_class"]={
["err_property_not_found_forward_class"]={
[i]="property A cannot be found in forward class object B",
[c]="property A cannot be found in forward class object B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 cannot be found in forward class object %1",
[g]="property %0 cannot be found in forward class object %1",
[g]=n,
[i]=l,
[h]="property (.*?) cannot be found in forward class object (.*?)",
[j]="property (.*?) cannot be found in forward class object (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[e]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up"},
[k]={{fb,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  if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}},
[k]={{pb,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  if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}},
[o]={
[o]={
["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 1,918: Line 1,937:
},
},
["err_property_not_found_suggest"]={
["err_property_not_found_suggest"]={
[i]="property A not found on object of type B; did you mean C?",
[c]="property A not found on object of type B; did you mean C?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %0 not found on object of type %1; did you mean %2?",
[g]="property %0 not found on object of type %1; did you mean %2?",
[g]=n,
[i]=l,
[h]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[j]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[e]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific"},
[k]={{fb,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  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}},
[k]={{pb,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  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}},
[o]={
[o]={
["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 1,933: Line 1,952:
},
},
["err_property_setter_ambiguous_use"]={
["err_property_setter_ambiguous_use"]={
[i]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior",
[c]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[g]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[g]=n,
[i]=l,
[h]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[j]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{"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  // 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        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();"}},
[k]={{"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  // 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        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();"}},
[o]={
[o]={
Line 1,948: Line 1,967:
},
},
["err_property_type"]={
["err_property_type"]={
[i]="property cannot have array or function type A",
[c]="property cannot have array or function type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property cannot have array or function type %0",
[g]="property cannot have array or function type %0",
[g]=n,
[i]=l,
[h]="property cannot have array or function type (.*?)",
[j]="property cannot have array or function type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{S,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  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}},
[k]={{W,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  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}},
[o]={
[o]={
["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 1,963: Line 1,982:
},
},
["err_protected_ivar_access"]={
["err_protected_ivar_access"]={
[i]="instance variable A is protected",
[c]="instance variable A is protected",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="instance variable %0 is protected",
[g]="instance variable %0 is protected",
[g]=n,
[i]=l,
[h]="instance variable (.*?) is protected",
[j]="instance variable (.*?) is protected",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{J,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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}},
[k]={{P,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  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}},
[o]={
[o]={
["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 1,978: Line 1,997:
},
},
["err_protocol_has_circular_dependency"]={
["err_protocol_has_circular_dependency"]={
[i]="protocol has circular dependency",
[c]="protocol has circular dependency",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="protocol has circular dependency",
[g]="protocol has circular dependency",
[g]=n,
[i]=l,
[h]="protocol has circular dependency",
[j]="protocol has circular dependency",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{Z,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\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);"}},
[k]={{eb,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\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);"}},
[o]={
[o]={
["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 1,993: Line 2,012:
},
},
["err_protocol_property_mismatch"]={
["err_protocol_property_mismatch"]={
[i]="property ... was selected for synthesis",
[c]="property ... was selected for synthesis",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis",
[g]="property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis",
[g]=n,
[i]=l,
[h]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[j]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"},
[e]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"},
[k]={{S,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  // Diagnose incompability.\n  {\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}},
[k]={{W,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  // Diagnose incompability.\n  {\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}},
[o]={
[o]={
["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 2,008: Line 2,027:
},
},
["err_pseudo_dtor_base_not_scalar"]={
["err_pseudo_dtor_base_not_scalar"]={
[i]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression",
[c]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[g]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[g]=n,
[i]=l,
[h]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[j]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[e]={"ad8a336b4037",1252085800,Eb,Eb},
[k]={{F,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}},
[k]={{J,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}},
[o]={
[o]={
["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 2,023: Line 2,042:
},
},
["err_pseudo_dtor_call_with_args"]={
["err_pseudo_dtor_call_with_args"]={
[i]="call to pseudo-destructor cannot have any arguments",
[c]="call to pseudo-destructor cannot have any arguments",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="call to pseudo-destructor cannot have any arguments",
[g]="call to pseudo-destructor cannot have any arguments",
[g]=n,
[i]=l,
[h]="call to pseudo\\-destructor cannot have any arguments",
[j]="call to pseudo\\-destructor cannot have any arguments",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[e]={"ad8a336b4037",1252085800,Eb,Eb},
[k]={{q,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  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        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}},
[k]={{r,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  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        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}},
[o]={
[o]={
["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 2,038: Line 2,057:
},
},
["err_pseudo_dtor_destructor_non_type"]={
["err_pseudo_dtor_destructor_non_type"]={
[i]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B",
[c]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[g]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[g]=n,
[i]=l,
[h]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[j]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"},
[e]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for"},
[k]={{F,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{F,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      if (!T) {\n        Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}},
[k]={{J,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{J,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      if (!T) {\n        Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}},
[o]={
[o]={
["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 2,053: Line 2,072:
},
},
["err_pseudo_dtor_type_mismatch"]={
["err_pseudo_dtor_type_mismatch"]={
[i]="the type of object expression (A) does not match the type being destroyed (B) in pseudo-destructor expression",
[c]="the type of object expression (A) does not match the type being destroyed (B) in pseudo-destructor expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="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",
[g]="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",
[g]=n,
[i]=l,
[h]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[j]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[e]={"ad8a336b4037",1252085800,Eb,Eb},
[k]={{F,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    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        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{F,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    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();"}},
[k]={{J,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    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        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{J,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    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();"}},
[o]={
[o]={
["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 2,068: Line 2,087:
},
},
["err_pure_friend"]={
["err_pure_friend"]={
[i]="friend declaration cannot have a pure-specifier",
[c]="friend declaration cannot have a pure-specifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="friend declaration cannot have a pure-specifier",
[g]="friend declaration cannot have a pure-specifier",
[g]=n,
[i]=l,
[h]="friend declaration cannot have a pure\\-specifier",
[j]="friend declaration cannot have a pure\\-specifier",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and"},
[e]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and","Rework parsing of pure-specifiers. Perform the grammar matching and"},
[k]={{z,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
[k]={{A,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
[o]={
[o]={
["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 2,083: Line 2,102:
},
},
["err_qualified_catch_declarator"]={
["err_qualified_catch_declarator"]={
[i]="exception declarator cannot be qualified",
[c]="exception declarator cannot be qualified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="exception declarator cannot be qualified",
[g]="exception declarator cannot be qualified",
[g]=n,
[i]=l,
[h]="exception declarator cannot be qualified",
[j]="exception declarator cannot be qualified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{z,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  if (D.getCXXScopeSpec().isSet() && !Invalid) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}}
[k]={{A,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\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"]={
[i]="friend function definition cannot be qualified with \'A\'",
[c]="friend function definition cannot be qualified with \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="friend function definition cannot be qualified with \'%0\'",
[g]="friend function definition cannot be qualified with \'%0\'",
[g]=n,
[i]=l,
[h]="friend function definition cannot be qualified with \'(.*?)\'",
[j]="friend function definition cannot be qualified with \'(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow"},
[e]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow"},
[k]={{z,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n    if (D.isFunctionDefinition()) {\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{z,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n  } else {\n    if (D.isFunctionDefinition()) {\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}},
[k]={{A,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n    if (D.isFunctionDefinition()) {\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{A,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n  } else {\n    if (D.isFunctionDefinition()) {\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}},
[o]={
[o]={
["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 2,110: Line 2,129:
},
},
["err_qualified_friend_no_match"]={
["err_qualified_friend_no_match"]={
[i]="friend declaration of A does not match any declaration in B",
[c]="friend declaration of A does not match any declaration in B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="friend declaration of %0 does not match any declaration in %1",
[g]="friend declaration of %0 does not match any declaration in %1",
[g]=n,
[i]=l,
[h]="friend declaration of (.*?) does not match any declaration in (.*?)",
[j]="friend declaration of (.*?) does not match any declaration in (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a"},
[e]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a"},
[k]={{u,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  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{r,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // 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;"}}
[k]={{u,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  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{s,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  // 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"]={
[i]="type operand A of \'typeid\' cannot have \'B\' qualifier",
[c]="type operand A of \'typeid\' cannot have \'B\' qualifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type operand %0 of \'typeid\' cannot have \'%1\' qualifier",
[g]="type operand %0 of \'typeid\' cannot have \'%1\' qualifier",
[g]=n,
[i]=l,
[h]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[j]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[e]={"7c11da0cfd33",1567434909,vb,vb},
[k]={{G,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
[k]={{K,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
[o]={
[o]={
["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 2,137: Line 2,156:
},
},
["err_qualified_member_nonclass"]={
["err_qualified_member_nonclass"]={
[i]="qualified member access refers to a member in A",
[c]="qualified member access refers to a member in A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="qualified member access refers to a member in %0",
[g]="qualified member access refers to a member in %0",
[g]=n,
[i]=l,
[h]="qualified member access refers to a member in (.*?)",
[j]="qualified member access refers to a member in (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!"},
[e]={"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!"},
[k]={{J,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  if (SS.isSet()) {\n    if (!isa<TypeDecl>(DC)) {\n      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}},
[k]={{P,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  if (SS.isSet()) {\n    if (!isa<TypeDecl>(DC)) {\n      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}},
[o]={
[o]={
["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 2,152: Line 2,171:
},
},
["err_qualified_member_of_unrelated"]={
["err_qualified_member_of_unrelated"]={
[i]="A is not a member of class B",
[c]="A is not a member of class B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%q0 is not a member of class %1",
[g]="%q0 is not a member of class %1",
[g]=n,
[i]=l,
[h]="(.*?) is not a member of class (.*?)",
[j]="(.*?) is not a member of class (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access"},
[e]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access"},
[k]={{J,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  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}},
[k]={{P,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  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}},
[o]={
[o]={
["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 2,167: Line 2,186:
},
},
["err_qualified_objc_access"]={
["err_qualified_objc_access"]={
[i]="... access cannot be qualified with \'A\'",
[c]="... access cannot be qualified with \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[g]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[g]=n,
[i]=l,
[h]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[j]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or"},
[e]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or"},
[k]={{J,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  // 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());"},{J,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  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());"}},
[k]={{P,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  // 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());"},{P,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  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());"}},
[o]={
[o]={
["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 2,182: Line 2,201:
},
},
["err_qualified_objc_catch_parm"]={
["err_qualified_objc_catch_parm"]={
[i]="@catch parameter declarator cannot be qualified",
[c]="@catch parameter declarator cannot be qualified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="@catch parameter declarator cannot be qualified",
[g]="@catch parameter declarator cannot be qualified",
[g]=n,
[i]=l,
[h]="@catch parameter declarator cannot be qualified",
[j]="@catch parameter declarator cannot be qualified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[e]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from"},
[k]={{Z,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\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();"}}
[k]={{eb,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\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"]={
[i]="parameter declarator cannot be qualified",
[c]="parameter declarator cannot be qualified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="parameter declarator cannot be qualified",
[g]="parameter declarator cannot be qualified",
[g]=n,
[i]=l,
[h]="parameter declarator cannot be qualified",
[j]="parameter declarator cannot be qualified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,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  // 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();"}},
[k]={{u,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  // 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();"}},
[o]={
[o]={
Line 2,209: Line 2,228:
},
},
["err_qualified_typedef_declarator"]={
["err_qualified_typedef_declarator"]={
[i]="typedef declarator cannot be qualified",
[c]="typedef declarator cannot be qualified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="typedef declarator cannot be qualified",
[g]="typedef declarator cannot be qualified",
[g]=n,
[i]=l,
[h]="typedef declarator cannot be qualified",
[j]="typedef declarator cannot be qualified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,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();"}},
[k]={{u,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();"}},
[o]={
[o]={
Line 2,224: Line 2,243:
},
},
["err_range_on_array_parameter"]={
["err_range_on_array_parameter"]={
[i]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C",
[c]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[g]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[g]=n,
[i]=l,
[h]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[j]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a"},
[e]={"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"},
[k]={{N,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  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    } else {\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}},
[k]={{T,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  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    } else {\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}},
[o]={
[o]={
["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 2,239: Line 2,258:
},
},
["err_raw_delim_too_long"]={
["err_raw_delim_too_long"]={
[i]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[c]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[g]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[g]=n,
[i]=l,
[h]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[j]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals."},
[e]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals."},
[k]={{"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  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}},
[k]={{"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  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}},
[o]={
[o]={
Line 2,254: Line 2,273:
},
},
["err_readonly_message_assignment"]={
["err_readonly_message_assignment"]={
[i]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[c]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[g]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[g]=n,
[i]=l,
[h]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[j]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{q,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  case Expr::MLV_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}},
[k]={{r,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  case Expr::MLV_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}},
[o]={
[o]={
["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 2,269: Line 2,288:
},
},
["err_realimag_invalid_type"]={
["err_realimag_invalid_type"]={
[i]="invalid type A to B operator",
[c]="invalid type A to B operator",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid type %0 to %1 operator",
[g]="invalid type %0 to %1 operator",
[g]=n,
[i]=l,
[h]="invalid type (.*?) to (.*?) operator",
[j]="invalid type (.*?) to (.*?) operator",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}},
[k]={{r,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}},
[o]={
[o]={
["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 2,284: Line 2,303:
},
},
["err_record_with_pointers_kernel_param"]={
["err_record_with_pointers_kernel_param"]={
[i]="... kernel parameters may not contain pointers",
[c]="... kernel parameters may not contain pointers",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{struct|union}0 kernel parameters may not contain pointers",
[g]="%select{struct|union}0 kernel parameters may not contain pointers",
[g]=n,
[i]=l,
[h]="(?:struct|union) kernel parameters may not contain pointers",
[j]="(?:struct|union) kernel parameters may not contain pointers",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[e]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL"},
[k]={{u,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\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;"}},
[k]={{u,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\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;"}},
[o]={
[o]={
Line 2,299: Line 2,318:
},
},
["err_recursive_default_argument"]={
["err_recursive_default_argument"]={
[i]="recursive evaluation of default argument",
[c]="recursive evaluation of default argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="recursive evaluation of default argument",
[g]="recursive evaluation of default argument",
[g]=n,
[i]=l,
[h]="recursive evaluation of default argument",
[j]="recursive evaluation of default argument",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"},
[e]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition"},
[k]={{q,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\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  if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}},
[k]={{r,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\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  if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}},
[o]={
[o]={
["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 2,314: Line 2,333:
},
},
["err_recursive_superclass"]={
["err_recursive_superclass"]={
[i]="trying to recursively use A as superclass of B",
[c]="trying to recursively use A as superclass of B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="trying to recursively use %0 as superclass of %1",
[g]="trying to recursively use %0 as superclass of %1",
[g]=n,
[i]=l,
[h]="trying to recursively use (.*?) as superclass of (.*?)",
[j]="trying to recursively use (.*?) as superclass of (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class."},
[e]={"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."},
[k]={{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  if (declaresSameEntity(PrevDecl, IDecl)) {\n    Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}},
[k]={{eb,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n    Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}},
[o]={
[o]={
["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 2,329: Line 2,348:
},
},
["err_redeclaration_different_type"]={
["err_redeclaration_different_type"]={
[i]="redeclaration of A with a different type: B vs C",
[c]="redeclaration of A with a different type: B vs C",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[g]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[g]=n,
[i]=l,
[h]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[j]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree"},
[e]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree"},
[k]={{u,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[k]={{u,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[o]={
[o]={
Line 2,344: Line 2,363:
},
},
["err_redeclaration_non_exported"]={
["err_redeclaration_non_exported"]={
[i]="cannot export redeclaration A here since the previous declaration ...",
[c]="cannot export redeclaration A here since the previous declaration ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1",
[g]="cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1",
[g]=n,
[i]=l,
[h]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[j]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Fb,1616787805,Gb},
[e]={Yb,1616787805,mb,mb},
[k]={{u,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  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}},
[k]={{u,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  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}},
[o]={
[o]={
Line 2,359: Line 2,378:
},
},
["err_redefinition"]={
["err_redefinition"]={
[i]="redefinition of A",
[c]="redefinition of A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of %0",
[g]="redefinition of %0",
[g]=n,
[i]=l,
[h]="redefinition of (.*?)",
[j]="redefinition of (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,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  if (getLangOpts().CPlusPlus) {\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{u,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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        if (Diag == diag::err_redefinition)"},{u,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  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,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  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{u,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{u,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  if (!Previous.empty()) {\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        if (!Invalid) {\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\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                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{u,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{z,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    if (!Previous.empty()) {\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{z,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  // 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          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{z,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{z,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{q,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  for (const OMPIteratorData &D : Data) {\n    if (S) {\n      if (!Previous.empty()) {\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{r,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{r,8904,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    } else if (Def) {\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{r,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\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  // 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;"}},
[k]={{u,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  if (getLangOpts().CPlusPlus) {\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{u,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  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        if (Diag == diag::err_redefinition)"},{u,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  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,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  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{u,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{u,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  if (!Previous.empty()) {\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        if (!Invalid) {\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\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                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{u,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{A,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    if (!Previous.empty()) {\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{A,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  // 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          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{A,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{A,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{r,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  for (const OMPIteratorData &D : Data) {\n    if (S) {\n      if (!Previous.empty()) {\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{s,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  if (PrevClassTemplate) {\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{s,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  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    } else if (Def) {\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{s,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\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  // 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;"}},
[o]={
[o]={
["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 2,374: Line 2,393:
},
},
["err_redefinition_different_concept"]={
["err_redefinition_different_concept"]={
[i]="redefinition of concept A with different template parameters or requirements",
[c]="redefinition of concept A with different template parameters or requirements",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of concept %0 with different template parameters or requirements",
[g]="redefinition of concept %0 with different template parameters or requirements",
[g]=n,
[i]=l,
[h]="redefinition of concept (.*?) with different template parameters or requirements",
[j]="redefinition of concept (.*?) with different template parameters or requirements",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{r,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
[k]={{s,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
},
},
["err_redefinition_different_kind"]={
["err_redefinition_different_kind"]={
[i]="redefinition of A as different kind of symbol",
[c]="redefinition of A as different kind of symbol",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of %0 as different kind of symbol",
[g]="redefinition of %0 as different kind of symbol",
[g]=n,
[i]=l,
[h]="redefinition of (.*?) as different kind of symbol",
[j]="redefinition of (.*?) as different kind of symbol",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,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  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,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  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,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  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,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  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      } else {\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{z,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  if (II) {\n    if (PrevNS) {\n    } else if (PrevDecl) {\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{z,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  // 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          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{z,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{z,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\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  if (declaresSameEntity(PrevDecl, IDecl)) {\n  } else {\n    if (PrevDecl && !SuperClassDecl) {\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  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  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  if (SuperClassname) {\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  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{r,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n  } else if (PrevDecl) {\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{r,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!OldConcept) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}},
[k]={{u,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  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,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  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,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  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,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  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      } else {\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{A,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  if (II) {\n    if (PrevNS) {\n    } else if (PrevDecl) {\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{A,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  // 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          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{A,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{A,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{eb,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  } else {\n    if (PrevDecl && !SuperClassDecl) {\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;"},{eb,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  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{eb,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{eb,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (SuperClassname) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{eb,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{s,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  if (PrevClassTemplate) {\n  } else if (PrevDecl) {\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{s,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!OldConcept) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}},
[o]={
[o]={
["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 2,401: Line 2,420:
},
},
["err_redefinition_different_namespace_alias"]={
["err_redefinition_different_namespace_alias"]={
[i]="redefinition of A as an alias for a different namespace",
[c]="redefinition of A as an alias for a different namespace",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of %0 as an alias for a different namespace",
[g]="redefinition of %0 as an alias for a different namespace",
[g]=n,
[i]=l,
[h]="redefinition of (.*?) as an alias for a different namespace",
[j]="redefinition of (.*?) as an alias for a different namespace",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[e]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[k]={{z,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\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      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}},
[k]={{A,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\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      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}},
[o]={
[o]={
["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 2,416: Line 2,435:
},
},
["err_redefinition_different_type"]={
["err_redefinition_different_type"]={
[i]="redefinition of A with a different type: B vs C",
[c]="redefinition of A with a different type: B vs C",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[g]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[g]=n,
[i]=l,
[h]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[j]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[k]={{u,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[o]={
[o]={
Line 2,431: Line 2,450:
},
},
["err_redefinition_different_typedef"]={
["err_redefinition_different_typedef"]={
[i]="... redefinition with different types (A vs B)",
[c]="... redefinition with different types (A vs B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[g]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[g]=n,
[i]=l,
[h]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[j]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{z,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n        if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
[k]={{u,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{A,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n        if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
[o]={
[o]={
["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 2,446: Line 2,465:
},
},
["err_redefinition_extern_inline"]={
["err_redefinition_extern_inline"]={
[i]="redefinition of a \'extern inline\' function A is not supported in ...",
[c]="redefinition of a \'extern inline\' function A is not supported in ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[g]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[g]=n,
[i]=l,
[h]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[j]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern"},
[e]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern"},
[k]={{u,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n    Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}},
[k]={{u,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n    Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}},
[o]={
[o]={
Line 2,461: Line 2,480:
},
},
["err_redefinition_of_enumerator"]={
["err_redefinition_of_enumerator"]={
[i]="redefinition of enumerator A",
[c]="redefinition of enumerator A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of enumerator %0",
[g]="redefinition of enumerator %0",
[g]=n,
[i]=l,
[h]="redefinition of enumerator (.*?)",
[j]="redefinition of enumerator (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}},
[k]={{u,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}},
[o]={
[o]={
Line 2,476: Line 2,495:
},
},
["err_redefinition_of_label"]={
["err_redefinition_of_label"]={
[i]="redefinition of label A",
[c]="redefinition of label A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of label %0",
[g]="redefinition of label %0",
[g]=n,
[i]=l,
[h]="redefinition of label (.*?)",
[j]="redefinition of label (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{N,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();"}},
[k]={{T,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();"}},
[o]={
[o]={
["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 2,491: Line 2,510:
},
},
["err_redefinition_variably_modified_typedef"]={
["err_redefinition_variably_modified_typedef"]={
[i]="redefinition of ... for variably-modified type A",
[c]="redefinition of ... for variably-modified type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[g]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[g]=n,
[i]=l,
[h]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[j]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a"},
[e]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a"},
[k]={{u,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (NewType->isVariablyModifiedType()) {\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}},
[k]={{u,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (NewType->isVariablyModifiedType()) {\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}},
[o]={
[o]={
Line 2,506: Line 2,525:
},
},
["err_ref_array_type"]={
["err_ref_array_type"]={
[i]="cannot refer to declaration with an array type inside block",
[c]="cannot refer to declaration with an array type inside block",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot refer to declaration with an array type inside block",
[g]="cannot refer to declaration with an array type inside block",
[g]=n,
[i]=l,
[h]="cannot refer to declaration with an array type inside block",
[j]="cannot refer to declaration with an array type inside block",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948."},
[e]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948.","Disallow captured arrays in blocks as well.  Radar 7438948."},
[k]={{q,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  // 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);"}},
[k]={{r,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  // 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);"}},
[o]={
[o]={
["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 2,521: Line 2,540:
},
},
["err_ref_bad_target"]={
["err_ref_bad_target"]={
[i]="reference to ... ... A in ... function",
[c]="reference to ... ... A in ... function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function",
[g]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function",
[g]=n,
[i]=l,
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[j]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[e]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets"},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{q,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  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{r,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  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}},
[o]={
[o]={
["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 2,536: Line 2,555:
},
},
["err_ref_bad_target_global_initializer"]={
["err_ref_bad_target_global_initializer"]={
[i]="reference to ... function A in global initializer",
[c]="reference to ... function A in global initializer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[g]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[g]=n,
[i]=l,
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[j]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers."},
[e]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers."},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if (InitFn) {\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if (InitFn) {\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}},
[o]={
[o]={
Line 2,551: Line 2,570:
},
},
["err_ref_flexarray_type"]={
["err_ref_flexarray_type"]={
[i]="cannot refer to declaration of structure variable with flexible array member inside block",
[c]="cannot refer to declaration of structure variable with flexible array member inside block",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot refer to declaration of structure variable with flexible array member inside block",
[g]="cannot refer to declaration of structure variable with flexible array member inside block",
[g]=n,
[i]=l,
[h]="cannot refer to declaration of structure variable with flexible array member inside block",
[j]="cannot refer to declaration of structure variable with flexible array member inside block",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "},
[e]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture "},
[k]={{q,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  // 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);"}},
[k]={{r,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  // 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);"}},
[o]={
[o]={
["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 2,566: Line 2,585:
},
},
["err_ref_init_ambiguous"]={
["err_ref_init_ambiguous"]={
[i]="reference initialization of type A with initializer of type B is ambiguous",
[c]="reference initialization of type A with initializer of type B is ambiguous",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[g]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[g]=n,
[i]=l,
[h]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[j]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."},
[e]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization."},
[k]={{E,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\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);"}},
[k]={{M,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\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);"}},
[o]={
[o]={
["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 2,581: Line 2,600:
},
},
["err_ref_non_value"]={
["err_ref_non_value"]={
[i]="A does not refer to a value",
[c]="A does not refer to a value",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 does not refer to a value",
[g]="%0 does not refer to a value",
[g]=n,
[i]=l,
[h]="(.*?) does not refer to a value",
[j]="(.*?) does not refer to a value",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[e]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a"},
[k]={{q,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  // 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();"}},
[k]={{r,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  // 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();"}},
[o]={
[o]={
["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 2,596: Line 2,615:
},
},
["err_ref_qualifier_comparison_operator"]={
["err_ref_qualifier_comparison_operator"]={
[i]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[c]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[g]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[g]=n,
[i]=l,
[h]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[j]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{z,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  if (IsMethod) {\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}},
[k]={{A,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  if (IsMethod) {\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}},
[o]={
[o]={
["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 2,611: Line 2,630:
},
},
["err_ref_qualifier_constructor"]={
["err_ref_qualifier_constructor"]={
[i]="ref-qualifier \'...\' is not allowed on a constructor",
[c]="ref-qualifier \'...\' is not allowed on a constructor",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[g]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[g]=n,
[i]=l,
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[j]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[e]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: "},
[k]={{z,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  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[k]={{A,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  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[o]={
[o]={
["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 2,626: Line 2,645:
},
},
["err_ref_qualifier_destructor"]={
["err_ref_qualifier_destructor"]={
[i]="ref-qualifier \'...\' is not allowed on a destructor",
[c]="ref-qualifier \'...\' is not allowed on a destructor",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[g]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[g]=n,
[i]=l,
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[j]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[e]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: "},
[k]={{z,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  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[k]={{A,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  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[o]={
[o]={
["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 2,641: Line 2,660:
},
},
["err_ref_qualifier_overload"]={
["err_ref_qualifier_overload"]={
[i]="cannot overload a member function ... with a member function ...",
[c]="cannot overload a member function ... with a member function ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="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",
[g]="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",
[g]=n,
[i]=l,
[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 \'&&\')",
[j]="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 \'&&\')",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot"},
[e]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot"},
[k]={{db,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\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        Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}},
[k]={{gb,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\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        Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}},
[o]={
[o]={
["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 2,656: Line 2,675:
},
},
["err_ref_vm_type"]={
["err_ref_vm_type"]={
[i]="cannot refer to declaration with a variably modified type inside block",
[c]="cannot refer to declaration with a variably modified type inside block",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot refer to declaration with a variably modified type inside block",
[g]="cannot refer to declaration with a variably modified type inside block",
[g]=n,
[i]=l,
[h]="cannot refer to declaration with a variably modified type inside block",
[j]="cannot refer to declaration with a variably modified type inside block",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."},
[e]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks."},
[k]={{q,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  // 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);"}},
[k]={{r,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  // 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);"}},
[o]={
[o]={
["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 2,671: Line 2,690:
},
},
["err_refactor_code_outside_of_function"]={
["err_refactor_code_outside_of_function"]={
[i]="the selected code is not a part of a function\'s / method\'s body",
[c]="the selected code is not a part of a function\'s / method\'s body",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the selected code is not a part of a function\'s / method\'s body",
[g]="the selected code is not a part of a function\'s / method\'s body",
[g]=n,
[i]=l,
[h]="the selected code is not a part of a function\'s \\/ method\'s body",
[j]="the selected code is not a part of a function\'s \\/ method\'s body",
[b]=a,
[b]=a,
[j]=qb,
[h]=Lb,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[e]={"7fe441b20d2d",1508865525,Nb,Nb},
[k]={{"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);"}}
[k]={{"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"]={
[i]="the selected expression can\'t be extracted",
[c]="the selected expression can\'t be extracted",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the selected expression can\'t be extracted",
[g]="the selected expression can\'t be extracted",
[g]=n,
[i]=l,
[h]="the selected expression can\'t be extracted",
[j]="the selected expression can\'t be extracted",
[b]=a,
[b]=a,
[j]=qb,
[h]=Lb,
[c]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters"},
[e]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters"},
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  if (Code.size() == 1) {\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);"}}
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  if (Code.size() == 1) {\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"]={
[i]="the selected expression is too simple to extract",
[c]="the selected expression is too simple to extract",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the selected expression is too simple to extract",
[g]="the selected expression is too simple to extract",
[g]=n,
[i]=l,
[h]="the selected expression is too simple to extract",
[j]="the selected expression is too simple to extract",
[b]=a,
[b]=a,
[j]=qb,
[h]=Lb,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[e]={"7fe441b20d2d",1508865525,Nb,Nb},
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\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);"}}
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\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"]={
[i]="refactoring action can\'t be initiated without a selection",
[c]="refactoring action can\'t be initiated without a selection",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="refactoring action can\'t be initiated without a selection",
[g]="refactoring action can\'t be initiated without a selection",
[g]=n,
[i]=l,
[h]="refactoring action can\'t be initiated without a selection",
[j]="refactoring action can\'t be initiated without a selection",
[b]=a,
[b]=a,
[j]=qb,
[h]=Lb,
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[e]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics"},
[k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
[k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
},
},
["err_refactor_selection_invalid_ast"]={
["err_refactor_selection_invalid_ast"]={
[i]="the provided selection does not overlap with the AST nodes of interest",
[c]="the provided selection does not overlap with the AST nodes of interest",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the provided selection does not overlap with the AST nodes of interest",
[g]="the provided selection does not overlap with the AST nodes of interest",
[g]=n,
[i]=l,
[h]="the provided selection does not overlap with the AST nodes of interest",
[j]="the provided selection does not overlap with the AST nodes of interest",
[b]=a,
[b]=a,
[j]=qb,
[h]=Lb,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[e]={"7fe441b20d2d",1508865525,Nb,Nb},
[k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\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  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
[k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\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  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"]={
[i]="there is no symbol at the given location",
[c]="there is no symbol at the given location",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="there is no symbol at the given location",
[g]="there is no symbol at the given location",
[g]=n,
[i]=l,
[h]="there is no symbol at the given location",
[j]="there is no symbol at the given location",
[b]=a,
[b]=a,
[j]=qb,
[h]=Lb,
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[e]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics"},
[k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
[k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\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"]={
[i]="binding reference of type A to value of type B ...",
[c]="binding reference of type A to value of type B ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="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",
[g]="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",
[g]=n,
[i]=l,
[h]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[j]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Ab,1260399737,Bb},
[e]={Tb,1260399737,lb,lb},
[k]={{E,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{E,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{E,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n    else\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}},
[k]={{M,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{M,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{M,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n    else\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}},
[o]={
[o]={
["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 2,758: Line 2,777:
},
},
["err_reference_bind_failed"]={
["err_reference_bind_failed"]={
[i]="reference to ... A could not bind to an ... of type B",
[c]="reference to ... A could not bind to an ... of type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="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",
[g]="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",
[g]=n,
[i]=l,
[h]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[j]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Ab,1260399737,Bb},
[e]={Tb,1260399737,lb,lb},
[k]={{E,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\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();"}},
[k]={{M,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\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();"}},
[o]={
[o]={
["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 2,773: Line 2,792:
},
},
["err_reference_bind_init_list"]={
["err_reference_bind_init_list"]={
[i]="reference to type A cannot bind to an initializer list",
[c]="reference to type A cannot bind to an initializer list",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference to type %0 cannot bind to an initializer list",
[g]="reference to type %0 cannot bind to an initializer list",
[g]=n,
[i]=l,
[h]="reference to type (.*?) cannot bind to an initializer list",
[j]="reference to type (.*?) cannot bind to an initializer list",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."},
[e]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences."},
[k]={{E,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceBindingToInitList:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[k]={{M,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceBindingToInitList:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[o]={
[o]={
["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 2,788: Line 2,807:
},
},
["err_reference_bind_temporary_addrspace"]={
["err_reference_bind_temporary_addrspace"]={
[i]="reference of type A cannot bind to a temporary object because of address space mismatch",
[c]="reference of type A cannot bind to a temporary object because of address space mismatch",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference of type %0 cannot bind to a temporary object because of address space mismatch",
[g]="reference of type %0 cannot bind to a temporary object because of address space mismatch",
[g]=n,
[i]=l,
[h]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[j]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries"},
[e]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries"},
[k]={{E,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}},
[k]={{M,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}},
[o]={
[o]={
["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 2,803: Line 2,822:
},
},
["err_reference_bind_to_bitfield"]={
["err_reference_bind_to_bitfield"]={
[i]="... reference cannot bind to bit-field...",
[c]="... reference cannot bind to bit-field...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[g]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[g]=n,
[i]=l,
[h]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[j]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Ab,1260399737,Bb},
[e]={Tb,1260399737,lb,lb},
[k]={{E,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}},
[k]={{M,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}},
[o]={
[o]={
["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 2,818: Line 2,837:
},
},
["err_reference_bind_to_matrix_element"]={
["err_reference_bind_to_matrix_element"]={
[i]="... reference cannot bind to matrix element",
[c]="... reference cannot bind to matrix element",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{non-const|volatile}0 reference cannot bind to matrix element",
[g]="%select{non-const|volatile}0 reference cannot bind to matrix element",
[g]=n,
[i]=l,
[h]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[j]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{E,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[k]={{M,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[o]={
[o]={
["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 2,833: Line 2,852:
},
},
["err_reference_bind_to_vector_element"]={
["err_reference_bind_to_vector_element"]={
[i]="... reference cannot bind to vector element",
[c]="... reference cannot bind to vector element",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{non-const|volatile}0 reference cannot bind to vector element",
[g]="%select{non-const|volatile}0 reference cannot bind to vector element",
[g]=n,
[i]=l,
[h]="(?:non\\-const|volatile) reference cannot bind to vector element",
[j]="(?:non\\-const|volatile) reference cannot bind to vector element",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element."},
[e]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element."},
[k]={{E,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[k]={{M,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[o]={
[o]={
["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 2,848: Line 2,867:
},
},
["err_reference_capture_with_reference_default"]={
["err_reference_capture_with_reference_default"]={
[i]="\'&\' cannot precede a capture when the capture default is \'&\'",
[c]="\'&\' cannot precede a capture when the capture default is \'&\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'&\' cannot precede a capture when the capture default is \'&\'",
[g]="\'&\' cannot precede a capture when the capture default is \'&\'",
[g]=n,
[i]=l,
[h]="\'&\' cannot precede a capture when the capture default is \'&\'",
[j]="\'&\' cannot precede a capture when the capture default is \'&\'",
[b]=a,
[b]=a,
[j]="Lambda Issue",
[h]="Lambda Issue",
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[e]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures."},
[k]={{vb,1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Init.isUsable()) {\n    } else {\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));"}},
[k]={{cc,1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Init.isUsable()) {\n    } else {\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));"}},
[o]={
[o]={
["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 2,863: Line 2,882:
},
},
["err_reference_has_multiple_inits"]={
["err_reference_has_multiple_inits"]={
[i]="reference cannot be initialized with multiple values",
[c]="reference cannot be initialized with multiple values",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference cannot be initialized with multiple values",
[g]="reference cannot be initialized with multiple values",
[g]=n,
[i]=l,
[h]="reference cannot be initialized with multiple values",
[j]="reference cannot be initialized with multiple values",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Ab,1260399737,Bb},
[e]={Tb,1260399737,lb,lb},
[k]={{E,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n    if (Args.empty()) {\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());"}}
[k]={{M,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n    if (Args.empty()) {\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"]={
[i]="pipes packet types cannot be of reference type",
[c]="pipes packet types cannot be of reference type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pipes packet types cannot be of reference type",
[g]="pipes packet types cannot be of reference type",
[g]=n,
[i]=l,
[h]="pipes packet types cannot be of reference type",
[j]="pipes packet types cannot be of reference type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"},
[e]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support"},
[k]={{u,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\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        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
[k]={{u,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\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        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
[o]={
[o]={
Line 2,890: Line 2,909:
},
},
["err_reference_to_function_with_unsatisfied_constraints"]={
["err_reference_to_function_with_unsatisfied_constraints"]={
[i]="invalid reference to function A: constraints not satisfied",
[c]="invalid reference to function A: constraints not satisfied",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid reference to function %0: constraints not satisfied",
[g]="invalid reference to function %0: constraints not satisfied",
[g]=n,
[i]=l,
[h]="invalid reference to function (.*?)\\: constraints not satisfied",
[j]="invalid reference to function (.*?)\\: constraints not satisfied",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[e]={"349636d2bfc3",1575555459,Ob,Ob},
[k]={{q,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  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\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      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}},
[k]={{r,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  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\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      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}},
[o]={
[o]={
["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 2,905: Line 2,924:
},
},
["err_reference_to_local_in_enclosing_context"]={
["err_reference_to_local_in_enclosing_context"]={
[i]="reference to local ... A declared in enclosing ...",
[c]="reference to local ... A declared in enclosing ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[g]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[g]=n,
[i]=l,
[h]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[j]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG"},
[e]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG"},
[k]={{q,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
[k]={{r,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
[o]={
[o]={
["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 2,920: Line 2,939:
},
},
["err_reference_to_void"]={
["err_reference_to_void"]={
[i]="cannot form a reference to \'void\'",
[c]="cannot form a reference to \'void\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot form a reference to \'void\'",
[g]="cannot form a reference to \'void\'",
[g]=n,
[i]=l,
[h]="cannot form a reference to \'void\'",
[j]="cannot form a reference to \'void\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{G,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  // 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);"}},
[k]={{K,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  // 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);"}},
[o]={
[o]={
["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 2,935: Line 2,954:
},
},
["err_reference_var_requires_init"]={
["err_reference_var_requires_init"]={
[i]="declaration of reference variable A requires an initializer",
[c]="declaration of reference variable A requires an initializer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="declaration of reference variable %0 requires an initializer",
[g]="declaration of reference variable %0 requires an initializer",
[g]=n,
[i]=l,
[h]="declaration of reference variable (.*?) requires an initializer",
[j]="declaration of reference variable (.*?) requires an initializer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{u,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\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());"}},
[k]={{u,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\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());"}},
[o]={
[o]={
Line 2,950: Line 2,969:
},
},
["err_reference_without_init"]={
["err_reference_without_init"]={
[i]="reference to type A requires an initializer",
[c]="reference to type A requires an initializer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference to type %0 requires an initializer",
[g]="reference to type %0 requires an initializer",
[g]=n,
[i]=l,
[h]="reference to type (.*?) requires an initializer",
[j]="reference to type (.*?) requires an initializer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"},
[e]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several"},
[k]={{E,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();"}},
[k]={{M,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();"}},
[o]={
[o]={
["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 2,965: Line 2,984:
},
},
["err_regparm_mismatch"]={
["err_regparm_mismatch"]={
[i]="function declared with regparm(A) attribute was previously declared without the regparm attribute",
[c]="function declared with regparm(A) attribute was previously declared without the regparm attribute",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[g]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[g]=n,
[i]=l,
[h]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[j]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a"},
[e]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a"},
[k]={{u,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  // 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();"}},
[k]={{u,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  // 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();"}},
[o]={
[o]={
Line 2,980: Line 2,999:
},
},
["err_relocatable_without_isysroot"]={
["err_relocatable_without_isysroot"]={
[i]="must specify system root with -isysroot when building a relocatable PCH file",
[c]="must specify system root with -isysroot when building a relocatable PCH file",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="must specify system root with -isysroot when building a relocatable PCH file",
[g]="must specify system root with -isysroot when building a relocatable PCH file",
[g]=n,
[i]=l,
[h]="must specify system root with \\-isysroot when building a relocatable PCH file",
[j]="must specify system root with \\-isysroot when building a relocatable PCH file",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."},
[e]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name."},
[k]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
[k]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
},
},
["err_repeat_attribute"]={
["err_repeat_attribute"]={
[i]="A attribute cannot be repeated",
[c]="A attribute cannot be repeated",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 attribute cannot be repeated",
[g]="%0 attribute cannot be repeated",
[g]=n,
[i]=l,
[h]="(.*?) attribute cannot be repeated",
[j]="(.*?) attribute cannot be repeated",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override."},
[e]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override."},
[k]={{Q,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
[k]={{V,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
[o]={
[o]={
["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 3,007: Line 3,026:
},
},
["err_require_constant_init_failed"]={
["err_require_constant_init_failed"]={
[i]="variable does not have a constant initializer",
[c]="variable does not have a constant initializer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="variable does not have a constant initializer",
[g]="variable does not have a constant initializer",
[g]=n,
[i]=l,
[h]="variable does not have a constant initializer",
[j]="variable does not have a constant initializer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[e]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[k]={{u,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}},
[k]={{u,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}},
[o]={
[o]={
Line 3,022: Line 3,041:
},
},
["err_requires_clause_inside_parens"]={
["err_requires_clause_inside_parens"]={
[i]="trailing requires clause should be placed outside parentheses",
[c]="trailing requires clause should be placed outside parentheses",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="trailing requires clause should be placed outside parentheses",
[g]="trailing requires clause should be placed outside parentheses",
[g]=n,
[i]=l,
[h]="trailing requires clause should be placed outside parentheses",
[j]="trailing requires clause should be placed outside parentheses",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{T,6714,"PastIdentifier:\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::l_square)) {\n    } else if (Tok.isRegularKeywordAttribute()) {\n    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}},
[k]={{Y,6714,"PastIdentifier:\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::l_square)) {\n    } else if (Tok.isRegularKeywordAttribute()) {\n    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}},
[o]={
[o]={
["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 3,037: Line 3,056:
},
},
["err_requires_clause_must_appear_after_trailing_return"]={
["err_requires_clause_must_appear_after_trailing_return"]={
[i]="trailing return type must appear before trailing requires clause",
[c]="trailing return type must appear before trailing requires clause",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="trailing return type must appear before trailing requires clause",
[g]="trailing return type must appear before trailing requires clause",
[g]=n,
[i]=l,
[h]="trailing return type must appear before trailing requires clause",
[j]="trailing return type must appear before trailing requires clause",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{eb,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\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    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}},
[k]={{jb,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\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    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}},
[o]={
[o]={
["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 3,052: Line 3,071:
},
},
["err_requires_clause_on_declarator_not_declaring_a_function"]={
["err_requires_clause_on_declarator_not_declaring_a_function"]={
[i]="trailing requires clause can only be used when declaring a function",
[c]="trailing requires clause can only be used when declaring a function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="trailing requires clause can only be used when declaring a function",
[g]="trailing requires clause can only be used when declaring a function",
[g]=n,
[i]=l,
[h]="trailing requires clause can only be used when declaring a function",
[j]="trailing requires clause can only be used when declaring a function",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{T,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  do {\n    if (Tok.is(tok::kw_requires)) {\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{eb,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}},
[k]={{Y,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  do {\n    if (Tok.is(tok::kw_requires)) {\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{jb,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}},
[o]={
[o]={
["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 3,067: Line 3,086:
},
},
["err_requires_expr_expected_type_constraint"]={
["err_requires_expr_expected_type_constraint"]={
[i]="expected concept name with optional arguments",
[c]="expected concept name with optional arguments",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected concept name with optional arguments",
[g]="expected concept name with optional arguments",
[g]=n,
[i]=l,
[h]="expected concept name with optional arguments",
[j]="expected concept name with optional arguments",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{hb,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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      case tok::l_brace: {\n        if (!isTypeConstraintAnnotation()) {\n          Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}},
[k]={{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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      case tok::l_brace: {\n        if (!isTypeConstraintAnnotation()) {\n          Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}},
[o]={
[o]={
[nb]={"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"]={
[i]="requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)",
[c]="requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)",
[g]="requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)",
[g]=n,
[i]=l,
[h]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[j]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[e]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions."},
[k]={{hb,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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      default: {\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}},
[k]={{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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      default: {\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}},
[o]={
[o]={
[nb]={"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"]={
[i]="default arguments not allowed for parameters of a requires expression",
[c]="default arguments not allowed for parameters of a requires expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="default arguments not allowed for parameters of a requires expression",
[g]="default arguments not allowed for parameters of a requires expression",
[g]=n,
[i]=l,
[h]="default arguments not allowed for parameters of a requires expression",
[j]="default arguments not allowed for parameters of a requires expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={sb,1576172311,tb},
[e]={Qb,1576172311,cb,cb},
[k]={{F,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  for (ParmVarDecl *Param : LocalParameters) {\n    if (Param->hasDefaultArg())\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}},
[k]={{J,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  for (ParmVarDecl *Param : LocalParameters) {\n    if (Param->hasDefaultArg())\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}},
[o]={
[o]={
[nb]={"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"]={
[i]="expected \'->\' before expression type requirement",
[c]="expected \'->\' before expression type requirement",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected \'->\' before expression type requirement",
[g]="expected \'->\' before expression type requirement",
[g]=n,
[i]=l,
[h]="expected \'\\-\\>\' before expression type requirement",
[j]="expected \'\\-\\>\' before expression type requirement",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{hb,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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      case tok::l_brace: {\n        if (!TryConsumeToken(tok::arrow))\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}},
[k]={{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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      case tok::l_brace: {\n        if (!TryConsumeToken(tok::arrow))\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}},
[o]={
[o]={
[nb]={"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"]={
[i]="varargs not allowed in requires expression",
[c]="varargs not allowed in requires expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="varargs not allowed in requires expression",
[g]="varargs not allowed in requires expression",
[g]=n,
[i]=l,
[h]="varargs not allowed in requires expression",
[j]="varargs not allowed in requires expression",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{hb,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  if (Tok.is(tok::l_paren)) {\n    if (!Tok.is(tok::r_paren)) {\n      if (EllipsisLoc.isValid())\n        Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}},
[k]={{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  if (Tok.is(tok::l_paren)) {\n    if (!Tok.is(tok::r_paren)) {\n      if (EllipsisLoc.isValid())\n        Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}},
[o]={
[o]={
[nb]={"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"]={
[i]="constraint variable A cannot be used in an evaluated context",
[c]="constraint variable A cannot be used in an evaluated context",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="constraint variable %0 cannot be used in an evaluated context",
[g]="constraint variable %0 cannot be used in an evaluated context",
[g]=n,
[i]=l,
[h]="constraint variable (.*?) cannot be used in an evaluated context",
[j]="constraint variable (.*?) cannot be used in an evaluated context",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={sb,1576172311,tb},
[e]={Qb,1576172311,cb,cb},
[k]={{q,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  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}},
[k]={{r,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  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}},
[o]={
[o]={
["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 3,157: Line 3,176:
},
},
["err_requires_expr_simple_requirement_noexcept"]={
["err_requires_expr_simple_requirement_noexcept"]={
[i]="\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)",
[c]="\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)",
[g]="\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)",
[g]=n,
[i]=l,
[h]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[j]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={kb,1570627358,jb},
[e]={wb,1570627358,X,X},
[k]={{hb,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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      default: {\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(), \"}\");"}},
[k]={{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  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      default: {\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(), \"}\");"}},
[o]={
[o]={
[nb]={"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"]={
[i]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[c]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[g]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[g]=n,
[i]=l,
[h]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[j]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"},
[e]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute"},
[k]={{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  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(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  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}},
[k]={{eb,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{eb,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}},
[o]={
[o]={
["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 3,187: Line 3,206:
},
},
["err_ret_local_block"]={
["err_ret_local_block"]={
[i]="returning block that lives on the local stack",
[c]="returning block that lives on the local stack",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="returning block that lives on the local stack",
[g]="returning block that lives on the local stack",
[g]=n,
[i]=l,
[h]="returning block that lives on the local stack",
[j]="returning block that lives on the local stack",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{E,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}},
[k]={{M,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}},
[o]={
[o]={
["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 3,202: Line 3,221:
},
},
["err_rethrow_used_outside_catch"]={
["err_rethrow_used_outside_catch"]={
[i]="@throw (rethrow) used outside of a @catch block",
[c]="@throw (rethrow) used outside of a @catch block",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="@throw (rethrow) used outside of a @catch block",
[g]="@throw (rethrow) used outside of a @catch block",
[g]=n,
[i]=l,
[h]="@throw \\(rethrow\\) used outside of a @catch block",
[j]="@throw \\(rethrow\\) used outside of a @catch block",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{N,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  if (!Throw) {\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}},
[k]={{T,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  if (!Throw) {\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}},
[o]={
[o]={
["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 3,217: Line 3,236:
},
},
["err_return_block_has_expr"]={
["err_return_block_has_expr"]={
[i]="void block should not return a value",
[c]="void block should not return a value",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="void block should not return a value",
[g]="void block should not return a value",
[g]=n,
[i]=l,
[h]="void block should not return a value",
[j]="void block should not return a value",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{N,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  // 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  } 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      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
[k]={{T,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  // 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  } 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      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
},
},
["err_return_in_captured_stmt"]={
["err_return_in_captured_stmt"]={
[i]="cannot return from A",
[c]="cannot return from A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot return from %0",
[g]="cannot return from %0",
[g]=n,
[i]=l,
[h]="cannot return from (.*?)",
[j]="cannot return from (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"},
[e]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements"},
[k]={{N,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  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
[k]={{T,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  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
[o]={
[o]={
["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 3,244: Line 3,263:
},
},
["err_return_in_constructor_handler"]={
["err_return_in_constructor_handler"]={
[i]="return in the catch of a function try block of a constructor is illegal",
[c]="return in the catch of a function try block of a constructor is illegal",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="return in the catch of a function try block of a constructor is illegal",
[g]="return in the catch of a function try block of a constructor is illegal",
[g]=n,
[i]=l,
[h]="return in the catch of a function try block of a constructor is illegal",
[j]="return in the catch of a function try block of a constructor is illegal",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ..."},
[e]={"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 ..."},
[k]={{z,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}},
[k]={{A,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}},
[o]={
[o]={
[Jb]={"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"}
[Sb]={"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"}
}
}
},
},
["err_return_in_coroutine"]={
["err_return_in_coroutine"]={
[i]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[c]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[g]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[g]=n,
[i]=l,
[h]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[j]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[b]=a,
[b]=a,
[j]="Coroutines Issue",
[h]="Coroutines Issue",
[c]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[e]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}},
[o]={
[o]={
Line 3,274: Line 3,293:
},
},
["err_return_init_list"]={
["err_return_init_list"]={
[i]="... A must not return a value",
[c]="... A must not return a value",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[g]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[g]=n,
[i]=l,
[h]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[j]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers."},
[e]={"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."},
[k]={{N,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}},
[k]={{T,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}},
[o]={
[o]={
["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 3,289: Line 3,308:
},
},
["err_return_value_with_address_space"]={
["err_return_value_with_address_space"]={
[i]="return type cannot be qualified with address space",
[c]="return type cannot be qualified with address space",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="return type cannot be qualified with address space",
[g]="return type cannot be qualified with address space",
[g]=n,
[i]=l,
[h]="return type cannot be qualified with address space",
[j]="return type cannot be qualified with address space",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{u,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{u,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().HLSL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{vb,876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  } else {\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      if (!RetTy.isNull()) {\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}},
[k]={{u,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{u,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().HLSL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{cc,876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  } else {\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      if (!RetTy.isNull()) {\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}},
[o]={
[o]={
["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 3,304: Line 3,323:
},
},
["err_right_angle_bracket_equal_needs_space"]={
["err_right_angle_bracket_equal_needs_space"]={
[i]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[c]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[g]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[g]=n,
[i]=l,
[h]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[j]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to"},
[e]={"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"},
[k]={{Cb,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  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}},
[k]={{bc,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  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}},
[o]={
[o]={
["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 3,319: Line 3,338:
},
},
["err_riscv_builtin_invalid_lmul"]={
["err_riscv_builtin_invalid_lmul"]={
[i]="LMUL argument must be in the range [0,3] or [5,7]",
[c]="LMUL argument must be in the range [0,3] or [5,7]",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="LMUL argument must be in the range [0,3] or [5,7]",
[g]="LMUL argument must be in the range [0,3] or [5,7]",
[g]=n,
[i]=l,
[h]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[j]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={yb,1615397021,zb},
[e]={ac,1615397021,hb,hb},
[k]={{w,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}},
[k]={{w,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}},
[o]={
[o]={
Line 3,334: Line 3,353:
},
},
["err_riscv_builtin_requires_extension"]={
["err_riscv_builtin_requires_extension"]={
[i]="builtin requires...: A",
[c]="builtin requires...: A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="builtin requires%select{| at least one of the following extensions to be enabled}0: %1",
[g]="builtin requires%select{| at least one of the following extensions to be enabled}0: %1",
[g]=n,
[i]=l,
[h]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[j]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{w,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{w,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}},
[k]={{w,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{w,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}},
[o]={
[o]={
Line 3,349: Line 3,368:
},
},
["err_riscv_type_requires_extension"]={
["err_riscv_type_requires_extension"]={
[i]="RISC-V type A requires the \'B\' extension",
[c]="RISC-V type A requires the \'B\' extension",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="RISC-V type %0 requires the \'%1\' extension",
[g]="RISC-V type %0 requires the \'%1\' extension",
[g]=n,
[i]=l,
[h]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[j]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{w,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\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\";"},{w,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{w,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{w,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{w,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\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\";"}},
[k]={{w,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\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\";"},{w,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{w,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{w,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{w,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\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\";"}},
[o]={
[o]={
Line 3,364: Line 3,383:
},
},
["err_root_class_cannot_use_super"]={
["err_root_class_cannot_use_super"]={
[i]="A cannot use \'super\' because it is a root class",
[c]="A cannot use \'super\' because it is a root class",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot use \'super\' because it is a root class",
[g]="%0 cannot use \'super\' because it is a root class",
[g]=n,
[i]=l,
[h]="(.*?) cannot use \'super\' because it is a root class",
[j]="(.*?) cannot use \'super\' because it is a root class",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{fb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\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          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{fb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  if (SuperTy.isNull()) {\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}},
[k]={{pb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\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          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{pb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  if (SuperTy.isNull()) {\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}},
[o]={
[o]={
["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 3,379: Line 3,398:
},
},
["err_roptr_cannot_build_shared"]={
["err_roptr_cannot_build_shared"]={
[i]="-mxcoff-roptr is not supported with -shared",
[c]="-mxcoff-roptr is not supported with -shared",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="-mxcoff-roptr is not supported with -shared",
[g]="-mxcoff-roptr is not supported with -shared",
[g]=n,
[i]=l,
[h]="\\-mxcoff\\-roptr is not supported with \\-shared",
[j]="\\-mxcoff\\-roptr is not supported with \\-shared",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[e]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers"},
[k]={{"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  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);"}}
[k]={{"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  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"]={
[i]="-mxcoff-roptr is supported only with -fdata-sections",
[c]="-mxcoff-roptr is supported only with -fdata-sections",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="-mxcoff-roptr is supported only with -fdata-sections",
[g]="-mxcoff-roptr is supported only with -fdata-sections",
[g]=n,
[i]=l,
[h]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[j]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[e]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers"},
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\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  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\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);"}}
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\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  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\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"]={
[i]="argument should be the value 90 or 270",
[c]="argument should be the value 90 or 270",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="argument should be the value 90 or 270",
[g]="argument should be the value 90 or 270",
[g]=n,
[i]=l,
[h]="argument should be the value 90 or 270",
[j]="argument should be the value 90 or 270",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{w,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  for (auto &I : ImmChecks) {\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}},
[k]={{w,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  for (auto &I : ImmChecks) {\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}},
[o]={
[o]={
Line 3,418: Line 3,437:
},
},
["err_rotation_argument_to_cmla"]={
["err_rotation_argument_to_cmla"]={
[i]="argument should be the value 0, 90, 180 or 270",
[c]="argument should be the value 0, 90, 180 or 270",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="argument should be the value 0, 90, 180 or 270",
[g]="argument should be the value 0, 90, 180 or 270",
[g]=n,
[i]=l,
[h]="argument should be the value 0, 90, 180 or 270",
[j]="argument should be the value 0, 90, 180 or 270",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{w,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  for (auto &I : ImmChecks) {\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))"}},
[k]={{w,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  for (auto &I : ImmChecks) {\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))"}},
[o]={
[o]={
Line 3,433: Line 3,452:
},
},
["err_rref_in_exception_spec"]={
["err_rref_in_exception_spec"]={
[i]="rvalue reference type A is not allowed in exception specification",
[c]="rvalue reference type A is not allowed in exception specification",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="rvalue reference type %0 is not allowed in exception specification",
[g]="rvalue reference type %0 is not allowed in exception specification",
[g]=n,
[i]=l,
[h]="rvalue reference type (.*?) is not allowed in exception specification",
[j]="rvalue reference type (.*?) is not allowed in exception specification",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications."},
[e]={"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."},
[k]={{"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  if (const PointerType *PT = T->getAs<PointerType>()) {\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    if (RT->isRValueReferenceType()) {\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}},
[k]={{"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  if (const PointerType *PT = T->getAs<PointerType>()) {\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    if (RT->isRValueReferenceType()) {\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}},
[o]={
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"}
[Sb]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"}
}
}
},
},
["err_sampler_argument_required"]={
["err_sampler_argument_required"]={
[i]="sampler_t variable required - got A",
[c]="sampler_t variable required - got A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="sampler_t variable required - got %0",
[g]="sampler_t variable required - got %0",
[g]=n,
[i]=l,
[h]="sampler_t variable required \\- got (.*?)",
[j]="sampler_t variable required \\- got (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."},
[e]={"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."},
[k]={{E,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_OCLSamplerInit: {\n      // Case 1\n      if (Entity.isParameterKind()) {\n        if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
[k]={{M,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_OCLSamplerInit: {\n      // Case 1\n      if (Entity.isParameterKind()) {\n        if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
},
},
["err_sampler_initializer_not_integer"]={
["err_sampler_initializer_not_integer"]={
[i]="sampler_t initialization requires 32-bit integer, not A",
[c]="sampler_t initialization requires 32-bit integer, not A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="sampler_t initialization requires 32-bit integer, not %0",
[g]="sampler_t initialization requires 32-bit integer, not %0",
[g]=n,
[i]=l,
[h]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
[j]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"},
[e]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer"},
[k]={{E,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_OCLSamplerInit: {\n      // Case 1\n      if (Entity.isParameterKind()) {\n      } else {\n        if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}},
[k]={{M,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_OCLSamplerInit: {\n      // Case 1\n      if (Entity.isParameterKind()) {\n      } else {\n        if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}},
[o]={
[o]={
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"}
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"}
Line 3,475: Line 3,494:
},
},
["err_scoped_enum_missing_identifier"]={
["err_scoped_enum_missing_identifier"]={
[i]="scoped enumeration requires a name",
[c]="scoped enumeration requires a name",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="scoped enumeration requires a name",
[g]="scoped enumeration requires a name",
[g]=n,
[i]=l,
[h]="scoped enumeration requires a name",
[j]="scoped enumeration requires a name",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"},
[e]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a","Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"},
[k]={{T,4873,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  if (!Name && ScopedEnumKWLoc.isValid()) {\n    Diag(Tok, diag::err_scoped_enum_missing_identifier);"}},
[k]={{Y,4873,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  if (!Name && ScopedEnumKWLoc.isValid()) {\n    Diag(Tok, diag::err_scoped_enum_missing_identifier);"}},
[o]={
[o]={
["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"}
["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"}
Line 3,490: Line 3,509:
},
},
["err_second_argument_to_cwsc_not_pointer"]={
["err_second_argument_to_cwsc_not_pointer"]={
[i]="second argument to __builtin_call_with_static_chain must be of pointer type",
[c]="second argument to __builtin_call_with_static_chain must be of pointer type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="second argument to __builtin_call_with_static_chain must be of pointer type",
[g]="second argument to __builtin_call_with_static_chain must be of pointer type",
[g]=n,
[i]=l,
[h]="second argument to __builtin_call_with_static_chain must be of pointer type",
[j]="second argument to __builtin_call_with_static_chain must be of pointer type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension."},
[e]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension.","Implement the __builtin_call_with_static_chain GNU extension."},
[k]={{w,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n  if (!ChainResult.get()->getType()->isPointerType()) {\n    S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}},
[k]={{w,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n  if (!ChainResult.get()->getType()->isPointerType()) {\n    S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}},
[o]={
[o]={
Line 3,505: Line 3,524:
},
},
["err_second_parameter_to_va_arg_abstract"]={
["err_second_parameter_to_va_arg_abstract"]={
[i]="second argument to \'va_arg\' is of abstract type A",
[c]="second argument to \'va_arg\' is of abstract type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="second argument to \'va_arg\' is of abstract type %0",
[g]="second argument to \'va_arg\' is of abstract type %0",
[g]=n,
[i]=l,
[h]="second argument to \'va_arg\' is of abstract type (.*?)",
[j]="second argument to \'va_arg\' is of abstract type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[e]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg"},
[k]={{q,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}},
[k]={{r,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}},
[o]={
[o]={
["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"}
["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"}
Line 3,520: Line 3,539:
},
},
["err_second_parameter_to_va_arg_incomplete"]={
["err_second_parameter_to_va_arg_incomplete"]={
[i]="second argument to \'va_arg\' is of incomplete type A",
[c]="second argument to \'va_arg\' is of incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="second argument to \'va_arg\' is of incomplete type %0",
[g]="second argument to \'va_arg\' is of incomplete type %0",
[g]=n,
[i]=l,
[h]="second argument to \'va_arg\' is of incomplete type (.*?)",
[j]="second argument to \'va_arg\' is of incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[e]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg"},
[k]={{q,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}},
[k]={{r,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}},
[o]={
[o]={
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"}
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"}
Line 3,535: Line 3,554:
},
},
["err_section_conflict"]={
["err_section_conflict"]={
[i]="A causes a section type conflict with B",
[c]="A causes a section type conflict with B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 causes a section type conflict with %1",
[g]="%0 causes a section type conflict with %1",
[g]=n,
[i]=l,
[h]="(.*?) causes a section type conflict with (.*?)",
[j]="(.*?) causes a section type conflict with (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas"},
[e]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas","[MS-ABI] Add support for #pragma section and related pragmas"},
[k]={{C,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{C,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}},
[k]={{G,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{G,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}},
[o]={
[o]={
["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"}
["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"}
Line 3,550: Line 3,569:
},
},
["err_seh___except_block"]={
["err_seh___except_block"]={
[i]="A only allowed in __except block or filter expression",
[c]="A only allowed in __except block or filter expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 only allowed in __except block or filter expression",
[g]="%0 only allowed in __except block or filter expression",
[g]=n,
[i]=l,
[h]="(.*?) only allowed in __except block or filter expression",
[j]="(.*?) only allowed in __except block or filter expression",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[e]={"1c0675e155b9",1303952914,ub,ub},
[k]={{cb,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{cb,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{cb,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{w,2470,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_code:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}},
[k]={{kb,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{kb,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{kb,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{w,2470,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_code:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}},
[o]={
[o]={
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"}
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"}
Line 3,565: Line 3,584:
},
},
["err_seh___except_filter"]={
["err_seh___except_filter"]={
[i]="A only allowed in __except filter expression",
[c]="A only allowed in __except filter expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 only allowed in __except filter expression",
[g]="%0 only allowed in __except filter expression",
[g]=n,
[i]=l,
[h]="(.*?) only allowed in __except filter expression",
[j]="(.*?) only allowed in __except filter expression",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[e]={"1c0675e155b9",1303952914,ub,ub},
[k]={{cb,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{cb,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{cb,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{w,2476,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_info:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}},
[k]={{kb,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{kb,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{kb,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{w,2476,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_info:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}},
[o]={
[o]={
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"}
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"}
Line 3,580: Line 3,599:
},
},
["err_seh___finally_block"]={
["err_seh___finally_block"]={
[i]="A only allowed in __finally block",
[c]="A only allowed in __finally block",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 only allowed in __finally block",
[g]="%0 only allowed in __finally block",
[g]=n,
[i]=l,
[h]="(.*?) only allowed in __finally block",
[j]="(.*?) only allowed in __finally block",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[e]={"1c0675e155b9",1303952914,ub,ub},
[k]={{cb,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{cb,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{cb,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}},
[k]={{kb,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{kb,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{kb,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}},
[o]={
[o]={
["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"}
["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"}
Line 3,595: Line 3,614:
},
},
["err_seh_expected_handler"]={
["err_seh_expected_handler"]={
[i]="expected \'__except\' or \'__finally\' block",
[c]="expected \'__except\' or \'__finally\' block",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected \'__except\' or \'__finally\' block",
[g]="expected \'__except\' or \'__finally\' block",
[g]=n,
[i]=l,
[h]="expected \'__except\' or \'__finally\' block",
[j]="expected \'__except\' or \'__finally\' block",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[e]={"1c0675e155b9",1303952914,ub,ub},
[k]={{rb,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n///  \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n///  seh-except-block\n///  seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n  if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n  } else if (Tok.is(tok::kw___finally)) {\n  } else {\n    return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}},
[k]={{Jb,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n///  \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n///  seh-except-block\n///  seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n  if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n  } else if (Tok.is(tok::kw___finally)) {\n  } else {\n    return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}},
[o]={
[o]={
["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"}
["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"}
Line 3,610: Line 3,629:
},
},
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
[i]="cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled",
[c]="cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled",
[g]="cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled",
[g]=n,
[i]=l,
[h]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled",
[j]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled",
[b]=a,
[b]=a,
[j]="Coroutines Issue",
[h]="Coroutines Issue",
[c]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch"},
[e]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch","[coroutines] Wrap the body of the coroutine in try-catch"},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}},
[o]={
[o]={
Line 3,625: Line 3,644:
},
},
["err_seh_try_outside_functions"]={
["err_seh_try_outside_functions"]={
[i]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[c]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[g]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[g]=n,
[i]=l,
[h]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls",
[j]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality"},
[e]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality","SEH: Track users of __try so we can pick a per-func EH personality"},
[k]={{N,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  if (FD)\n  else\n    Diag(TryLoc, diag::err_seh_try_outside_functions);"}},
[k]={{T,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  if (FD)\n  else\n    Diag(TryLoc, diag::err_seh_try_outside_functions);"}},
[o]={
[o]={
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"}
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"}
Line 3,640: Line 3,659:
},
},
["err_seh_try_unsupported"]={
["err_seh_try_unsupported"]={
[i]="SEH \'__try\' is not supported on this target",
[c]="SEH \'__try\' is not supported on this target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="SEH \'__try\' is not supported on this target",
[g]="SEH \'__try\' is not supported on this target",
[g]=n,
[i]=l,
[h]="SEH \'__try\' is not supported on this target",
[j]="SEH \'__try\' is not supported on this target",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"},
[e]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try","[SEH] Add 32-bit lowering code for __try"},
[k]={{N,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // Reject __try on unsupported targets.\n  if (!Context.getTargetInfo().isSEHTrySupported())\n    Diag(TryLoc, diag::err_seh_try_unsupported);"}}
[k]={{T,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // Reject __try on unsupported targets.\n  if (!Context.getTargetInfo().isSEHTrySupported())\n    Diag(TryLoc, diag::err_seh_try_unsupported);"}}
},
},
["err_selected_explicit_constructor"]={
["err_selected_explicit_constructor"]={
[i]="chosen constructor is explicit in copy-initialization",
[c]="chosen constructor is explicit in copy-initialization",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="chosen constructor is explicit in copy-initialization",
[g]="chosen constructor is explicit in copy-initialization",
[g]=n,
[i]=l,
[h]="chosen constructor is explicit in copy\\-initialization",
[j]="chosen constructor is explicit in copy\\-initialization",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120."},
[e]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120.","Properly handle explicit constructors in list-initialization. Fixes PR12120."},
[k]={{E,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ExplicitConstructor: {\n    S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}},
[k]={{M,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ExplicitConstructor: {\n    S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"}
["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"}
Line 3,667: Line 3,686:
},
},
["err_selector_element_const_type"]={
["err_selector_element_const_type"]={
[i]="selector element of type A cannot be a constant lvalue expression",
[c]="selector element of type A cannot be a constant lvalue expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="selector element of type %0 cannot be a constant lvalue expression",
[g]="selector element of type %0 cannot be a constant lvalue expression",
[g]=n,
[i]=l,
[h]="selector element of type (.*?) cannot be a constant lvalue expression",
[j]="selector element of type (.*?) cannot be a constant lvalue expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"},
[e]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in","ObjectiveC. ObjectiveC\'s collection selector expression in"},
[k]={{N,2345,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    } else {\n      if (FirstType.isConstQualified())\n        Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}},
[k]={{T,2345,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    } else {\n      if (FirstType.isConstQualified())\n        Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"}
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"}
Line 3,682: Line 3,701:
},
},
["err_selector_element_not_lvalue"]={
["err_selector_element_not_lvalue"]={
[i]="selector element is not a valid lvalue",
[c]="selector element is not a valid lvalue",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="selector element is not a valid lvalue",
[g]="selector element is not a valid lvalue",
[g]=n,
[i]=l,
[h]="selector element is not a valid lvalue",
[j]="selector element is not a valid lvalue",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{N,2340,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    } else {\n      if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n        return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}},
[k]={{T,2340,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    } else {\n      if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n        return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}},
[o]={
[o]={
["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"}
["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"}
Line 3,697: Line 3,716:
},
},
["err_selector_element_type"]={
["err_selector_element_type"]={
[i]="selector element type A is not a valid object",
[c]="selector element type A is not a valid object",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="selector element type %0 is not a valid object",
[g]="selector element type %0 is not a valid object",
[g]=n,
[i]=l,
[h]="selector element type (.*?) is not a valid object",
[j]="selector element type (.*?) is not a valid object",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{N,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n      return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}},
[k]={{T,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n      return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}},
[o]={
[o]={
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"}
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"}
Line 3,712: Line 3,731:
},
},
["err_setter_type_void"]={
["err_setter_type_void"]={
[i]="type of setter must be void",
[c]="type of setter must be void",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type of setter must be void",
[g]="type of setter must be void",
[g]=n,
[i]=l,
[h]="type of setter must be void",
[j]="type of setter must be void",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{S,2446,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n      Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}}
[k]={{W,2446,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n      Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}}
},
},
["err_setting_eval_method_used_in_unsafe_context"]={
["err_setting_eval_method_used_in_unsafe_context"]={
[i]="... cannot be used with ...",
[c]="... cannot be used with ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{\'#pragma clang fp eval_method\'|option \'ffp-eval-method\'}0 cannot be used with %select{option \'fapprox-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp-eval-method\'|\'#pragma clang fp reassociate\'}1",
[g]="%select{\'#pragma clang fp eval_method\'|option \'ffp-eval-method\'}0 cannot be used with %select{option \'fapprox-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp-eval-method\'|\'#pragma clang fp reassociate\'}1",
[g]=n,
[i]=l,
[h]="(?:\'\\#pragma clang fp eval_method\'|option \'ffp\\-eval\\-method\') cannot be used with (?:option \'fapprox\\-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp\\-eval\\-method\'|\'\\#pragma clang fp reassociate\')",
[j]="(?:\'\\#pragma clang fp eval_method\'|option \'ffp\\-eval\\-method\') cannot be used with (?:option \'fapprox\\-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp\\-eval\\-method\'|\'\\#pragma clang fp reassociate\')",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Hb,1620118562,Kb},
[e]={Vb,1620118562,fb,fb},
[k]={{C,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().ApproxFunc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{C,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowFPReassoc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{C,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowRecip)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{C,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n  if (IsEnabled) {\n    if (Reason != -1)\n      Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}}
[k]={{G,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().ApproxFunc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{G,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowFPReassoc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{G,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowRecip)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{G,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n  if (IsEnabled) {\n    if (Reason != -1)\n      Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}}
},
},
["err_shared_var_init"]={
["err_shared_var_init"]={
[i]="initialization is not supported for __shared__ variables.",
[c]="initialization is not supported for __shared__ variables.",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="initialization is not supported for __shared__ variables.",
[g]="initialization is not supported for __shared__ variables.",
[g]=n,
[i]=l,
[h]="initialization is not supported for __shared__ variables\\.",
[j]="initialization is not supported for __shared__ variables\\.",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables."},
[e]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables.","[CUDA] Do not allow dynamic initialization of global device side variables."},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n    Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n    Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}},
[o]={
[o]={
Line 3,751: Line 3,770:
},
},
["err_shift_rhs_only_vector"]={
["err_shift_rhs_only_vector"]={
[i]="requested shift is a vector of type A but the first operand is not a vector (B)",
[c]="requested shift is a vector of type A but the first operand is not a vector (B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="requested shift is a vector of type %0 but the first operand is not a vector (%1)",
[g]="requested shift is a vector of type %0 but the first operand is not a vector (%1)",
[g]=n,
[i]=l,
[h]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)",
[j]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[e]={"c65605d008dd",1423201495,Db,Db},
[k]={{q,12103,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n  if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n    S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[k]={{r,12103,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n  if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n    S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:732:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:733:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:736:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:737:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:832:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:833:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:836:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:837:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')"}
["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:732:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:733:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:736:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:737:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:832:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:833:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:836:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:837:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')"}
Line 3,766: Line 3,785:
},
},
["err_shufflevector_argument_too_large"]={
["err_shufflevector_argument_too_large"]={
[i]="index for __builtin_shufflevector must be less than the total number of vector elements",
[c]="index for __builtin_shufflevector must be less than the total number of vector elements",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="index for __builtin_shufflevector must be less than the total number of vector elements",
[g]="index for __builtin_shufflevector must be less than the total number of vector elements",
[g]=n,
[i]=l,
[h]="index for __builtin_shufflevector must be less than the total number of vector elements",
[j]="index for __builtin_shufflevector must be less than the total number of vector elements",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}},
[k]={{w,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}},
[o]={
[o]={
Line 3,781: Line 3,800:
},
},
["err_shufflevector_nonconstant_argument"]={
["err_shufflevector_nonconstant_argument"]={
[i]="index for __builtin_shufflevector must be a constant integer",
[c]="index for __builtin_shufflevector must be a constant integer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="index for __builtin_shufflevector must be a constant integer",
[g]="index for __builtin_shufflevector must be a constant integer",
[g]=n,
[i]=l,
[h]="index for __builtin_shufflevector must be a constant integer",
[j]="index for __builtin_shufflevector must be a constant integer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->getSourceRange());"}}
[k]={{w,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->getSourceRange());"}}
},
},
["err_single_decl_assign_in_for_range"]={
["err_single_decl_assign_in_for_range"]={
[i]="range-based \'for\' statement uses \':\', not \'=\'",
[c]="range-based \'for\' statement uses \':\', not \'=\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="range-based \'for\' statement uses \':\', not \'=\'",
[g]="range-based \'for\' statement uses \':\', not \'=\'",
[g]=n,
[i]=l,
[h]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'",
[j]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration"},
[e]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration","Suggest fix-it \':\' when \'=\' used in for-range-declaration"},
[k]={{T,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    if (Tok.is(tok::kw_delete)) {\n    } else if (Tok.is(tok::kw_default)) {\n    } else {\n      // If this is the only decl in (possibly) range based for statement,\n      // our best guess is that the user meant \':\' instead of \'=\'.\n      if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n        Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}}
[k]={{Y,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    if (Tok.is(tok::kw_delete)) {\n    } else if (Tok.is(tok::kw_default)) {\n    } else {\n      // If this is the only decl in (possibly) range based for statement,\n      // our best guess is that the user meant \':\' instead of \'=\'.\n      if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n        Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}}
},
},
["err_size_t_literal_too_large"]={
["err_size_t_literal_too_large"]={
[i]="...\'size_t\' literal is out of range of possible ...\'size_t\' values",
[c]="...\'size_t\' literal is out of range of possible ...\'size_t\' values",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values",
[g]="%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values",
[g]=n,
[i]=l,
[h]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values",
[j]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[e]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals"},
[k]={{q,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    if (Literal.GetIntegerValue(ResultVal)) {\n    } else {\n      // If we still couldn\'t decide a type, we either have \'size_t\' literal\n      // that is out of range, or a decimal literal that does not fit in a\n      // signed long long and has no U suffix.\n      if (Ty.isNull()) {\n        if (Literal.isSizeT)\n          Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}},
[k]={{r,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    if (Literal.GetIntegerValue(ResultVal)) {\n    } else {\n      // If we still couldn\'t decide a type, we either have \'size_t\' literal\n      // that is out of range, or a decimal literal that does not fit in a\n      // signed long long and has no U suffix.\n      if (Ty.isNull()) {\n        if (Literal.isSizeT)\n          Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}},
[o]={
[o]={
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"}
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"}
Line 3,820: Line 3,839:
},
},
["err_sizeless_in_exception_spec"]={
["err_sizeless_in_exception_spec"]={
[i]="...sizeless type A is not allowed in exception specification",
[c]="...sizeless type A is not allowed in exception specification",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{|reference to }0sizeless type %1 is not allowed in exception specification",
[g]="%select{|reference to }0sizeless type %1 is not allowed in exception specification",
[g]=n,
[i]=l,
[h]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification",
[j]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // The MSVC compatibility mode doesn\'t extend to sizeless types,\n  // so diagnose them separately.\n  if (PointeeT->isSizelessType() && Kind != 1) {\n    Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}},
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // The MSVC compatibility mode doesn\'t extend to sizeless types,\n  // so diagnose them separately.\n  if (PointeeT->isSizelessType() && Kind != 1) {\n    Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}},
[o]={
[o]={
Line 3,835: Line 3,854:
},
},
["err_sizeless_nonlocal"]={
["err_sizeless_nonlocal"]={
[i]="non-local variable with sizeless type A",
[c]="non-local variable with sizeless type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-local variable with sizeless type %0",
[g]="non-local variable with sizeless type %0",
[g]=n,
[i]=l,
[h]="non\\-local variable with sizeless type (.*?)",
[j]="non\\-local variable with sizeless type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{u,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}},
[k]={{u,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}},
[o]={
[o]={
Line 3,850: Line 3,869:
},
},
["err_sizeof_alignof_function_type"]={
["err_sizeof_alignof_function_type"]={
[i]="invalid application of \'A\' to a function type",
[c]="invalid application of \'A\' to a function type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid application of \'%0\' to a function type",
[g]="invalid application of \'%0\' to a function type",
[g]=n,
[i]=l,
[h]="invalid application of \'(.*?)\' to a function type",
[j]="invalid application of \'(.*?)\' to a function type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++."},
[e]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++.","sizeof(void) etc. should be a hard error in C++."},
[k]={{q,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (ExprTy->isFunctionType()) {\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{q,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  if (ExprType->isFunctionType()) {\n    Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}},
[k]={{r,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (ExprTy->isFunctionType()) {\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{r,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  if (ExprType->isFunctionType()) {\n    Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}},
[o]={
[o]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"}
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"}
Line 3,865: Line 3,884:
},
},
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
[i]="invalid application of \'A\' to ... type B",
[c]="invalid application of \'A\' to ... type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2",
[g]="invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2",
[g]=n,
[i]=l,
[h]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)",
[j]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n    if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{q,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else {\n    if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{q,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}},
[k]={{r,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n    if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{r,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else {\n    if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{r,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"}
Line 3,880: Line 3,899:
},
},
["err_sizeof_alignof_typeof_bitfield"]={
["err_sizeof_alignof_typeof_bitfield"]={
[i]="invalid application of \'...\' to bit-field",
[c]="invalid application of \'...\' to bit-field",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field",
[g]="invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field",
[g]=n,
[i]=l,
[h]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field",
[j]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[e]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[k]={{q,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (E->getObjectKind() == OK_BitField) {\n    S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{q,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n  if (E->isTypeDependent()) {\n  } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else if (ExprKind == UETT_VecStep) {\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n  } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{G,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n  if (!getLangOpts().CPlusPlus && E->refersToBitField())\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}},
[k]={{r,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (E->getObjectKind() == OK_BitField) {\n    S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{r,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n  if (E->isTypeDependent()) {\n  } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else if (ExprKind == UETT_VecStep) {\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n  } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{K,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n  if (!getLangOpts().CPlusPlus && E->refersToBitField())\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}},
[o]={
[o]={
["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"}
["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"}
Line 3,895: Line 3,914:
},
},
["err_sizeof_nonfragile_interface"]={
["err_sizeof_nonfragile_interface"]={
[i]="application of \'...\' to interface A is not supported on this architecture and platform",
[c]="application of \'...\' to interface A is not supported on this architecture and platform",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform",
[g]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform",
[g]=n,
[i]=l,
[h]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform",
[j]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when"},
[e]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when","reject sizeof(itf) when itf is a forward declared interface, or when"},
[k]={{q,4348,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // Reject sizeof(interface) and sizeof(interface<proto>) if the\n  // runtime doesn\'t allow it.\n  if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n    S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}},
[k]={{r,4348,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // Reject sizeof(interface) and sizeof(interface<proto>) if the\n  // runtime doesn\'t allow it.\n  if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n    S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}},
[o]={
[o]={
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:26:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:35:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:67:40: error: application of \'sizeof\' to interface \'I\' is not supported on this architecture and platform"}
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:26:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:35:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:67:40: error: application of \'sizeof\' to interface \'I\' is not supported on this architecture and platform"}
Line 3,910: Line 3,929:
},
},
["err_sizeof_pack_no_pack_name"]={
["err_sizeof_pack_no_pack_name"]={
[i]="A does not refer to the name of a parameter pack",
[c]="A does not refer to the name of a parameter pack",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 does not refer to the name of a parameter pack",
[g]="%0 does not refer to the name of a parameter pack",
[g]=n,
[i]=l,
[h]="(.*?) does not refer to the name of a parameter pack",
[j]="(.*?) does not refer to the name of a parameter pack",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[e]={"820ba7ba43a2",1294162438,Cb,Cb},
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  if (!ParameterPack || !ParameterPack->isParameterPack()) {\n    Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}},
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  if (!ParameterPack || !ParameterPack->isParameterPack()) {\n    Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}},
[o]={
[o]={
Line 3,925: Line 3,944:
},
},
["err_sizeof_pack_no_pack_name_suggest"]={
["err_sizeof_pack_no_pack_name_suggest"]={
[i]="A does not refer to the name of a parameter pack; did you mean B?",
[c]="A does not refer to the name of a parameter pack; did you mean B?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 does not refer to the name of a parameter pack; did you mean %1?",
[g]="%0 does not refer to the name of a parameter pack; did you mean %1?",
[g]=n,
[i]=l,
[h]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?",
[j]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[e]={"820ba7ba43a2",1294162438,Cb,Cb},
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}},
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}},
[o]={
[o]={
Line 3,940: Line 3,959:
},
},
["err_sizeof_parameter_pack"]={
["err_sizeof_parameter_pack"]={
[i]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[c]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[g]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[g]=n,
[i]=l,
[h]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression",
[j]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[e]={"820ba7ba43a2",1294162438,Cb,Cb},
[k]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::identifier)) {\n    } else {\n      Diag(Tok, diag::err_sizeof_parameter_pack);"}}
[k]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::identifier)) {\n    } else {\n      Diag(Tok, diag::err_sizeof_parameter_pack);"}}
},
},
["err_sls_hardening_arm_not_supported"]={
["err_sls_hardening_arm_not_supported"]={
[i]="-mharden-sls is only supported on armv7-a or later",
[c]="-mharden-sls is only supported on armv7-a or later",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="-mharden-sls is only supported on armv7-a or later",
[g]="-mharden-sls is only supported on armv7-a or later",
[g]=n,
[i]=l,
[h]="\\-mharden\\-sls is only supported on armv7\\-a or later",
[j]="\\-mharden\\-sls is only supported on armv7\\-a or later",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[e]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{Ib,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Enable/disable straight line speculation hardening.\n  if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n    if (EnableRetBr || EnableBlr)\n      if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n        D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}}
[k]={{Zb,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Enable/disable straight line speculation hardening.\n  if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n    if (EnableRetBr || EnableBlr)\n      if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n        D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}}
},
},
["err_spaceship_argument_narrowing"]={
["err_spaceship_argument_narrowing"]={
[i]="argument to \'operator<=>\' ...",
[c]="argument to \'operator<=>\' ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="argument to \'operator<=>\' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0",
[g]="argument to \'operator<=>\' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0",
[g]=n,
[i]=l,
[h]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
[j]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[e]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[k]={{q,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Constant_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{q,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Type_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}},
[k]={{r,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Constant_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{r,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Type_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}},
[o]={
[o]={
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"}
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"}
Line 3,979: Line 3,998:
},
},
["err_spec_member_not_instantiated"]={
["err_spec_member_not_instantiated"]={
[i]="specialization of member A does not specialize an instantiated member",
[c]="specialization of member A does not specialize an instantiated member",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="specialization of member %q0 does not specialize an instantiated member",
[g]="specialization of member %q0 does not specialize an instantiated member",
[g]=n,
[i]=l,
[h]="specialization of member (.*?) does not specialize an instantiated member",
[j]="specialization of member (.*?) does not specialize an instantiated member",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep"},
[e]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep","For instantiations of static data members of class templates, keep"},
[k]={{r,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}},
[k]={{s,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"}
Line 3,994: Line 4,013:
},
},
["err_specialization_after_instantiation"]={
["err_specialization_after_instantiation"]={
[i]="explicit specialization of A after instantiation",
[c]="explicit specialization of A after instantiation",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="explicit specialization of %0 after instantiation",
[g]="explicit specialization of %0 after instantiation",
[g]=n,
[i]=l,
[h]="explicit specialization of (.*?) after instantiation",
[j]="explicit specialization of (.*?) after instantiation",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[e]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit","Diagnose the declaration of explicit specializations after an implicit"},
[k]={{r,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{r,8879,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{r,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitSpecialization:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}},
[k]={{s,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{s,8879,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{s,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitSpecialization:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"}
Line 4,009: Line 4,028:
},
},
["err_specialization_not_primary_template"]={
["err_specialization_not_primary_template"]={
[i]="cannot reference member of primary template because deduced class template specialization A is ... specialization",
[c]="cannot reference member of primary template because deduced class template specialization A is ... specialization",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization",
[g]="cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization",
[g]=n,
[i]=l,
[h]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization",
[j]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple."},
[e]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple.","Fix a couple of class template argument deduction crashes with libc++\'s tuple."},
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n    while (!DC->isFileContext()) {\n      // Move to the outer template scope.\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n        if (Guide && Guide->isImplicit()) {\n          // Check that this template-id names the primary template and not a\n          // partial or explicit specialization. (In the latter cases, it\'s\n          // meaningless to attempt to find an instantiation of D within the\n          // specialization.)\n          // FIXME: The standard doesn\'t say what should happen here.\n          if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n            Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n    while (!DC->isFileContext()) {\n      // Move to the outer template scope.\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n        if (Guide && Guide->isImplicit()) {\n          // Check that this template-id names the primary template and not a\n          // partial or explicit specialization. (In the latter cases, it\'s\n          // meaningless to attempt to find an instantiation of D within the\n          // specialization.)\n          // FIXME: The standard doesn\'t say what should happen here.\n          if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n            Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
},
},
["err_specialize_member_of_template"]={
["err_specialize_member_of_template"]={
[i]="cannot specialize ...a member of an unspecialized template",
[c]="cannot specialize ...a member of an unspecialized template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
[g]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
[g]=n,
[i]=l,
[h]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
[j]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"},
[e]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits","Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"},
[k]={{r,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n    if (SawNonEmptyTemplateParameterList) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}},
[k]={{s,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n    if (SawNonEmptyTemplateParameterList) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}},
[o]={
[o]={
["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"}
["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"}
Line 4,036: Line 4,055:
},
},
["err_stack_tagging_requires_hardware_feature"]={
["err_stack_tagging_requires_hardware_feature"]={
[i]="\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag",
[c]="\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag",
[g]="\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag",
[g]=n,
[i]=l,
[h]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag",
[j]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"},
[e]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs"},
[k]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n    TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}}
[k]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n    TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}}
},
},
["err_standalone_class_nested_name_specifier"]={
["err_standalone_class_nested_name_specifier"]={
[i]="forward declaration of ... cannot have a nested name specifier",
[c]="forward declaration of ... cannot have a nested name specifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
[g]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
[g]=n,
[i]=l,
[h]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
[j]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."},
[e]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations."},
[k]={{u,5157,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n    Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}},
[k]={{u,5157,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n    Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}},
[o]={
[o]={
Line 4,063: Line 4,082:
},
},
["err_static_assert_expression_is_not_constant"]={
["err_static_assert_expression_is_not_constant"]={
[i]="static assertion expression is not an integral constant expression",
[c]="static assertion expression is not an integral constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static assertion expression is not an integral constant expression",
[g]="static assertion expression is not an integral constant expression",
[g]=n,
[i]=l,
[h]="static assertion expression is not an integral constant expression",
[j]="static assertion expression is not an integral constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{z,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}},
[k]={{A,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}},
[o]={
[o]={
["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"}
["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"}
Line 4,078: Line 4,097:
},
},
["err_static_assert_failed"]={
["err_static_assert_failed"]={
[i]="static assertion failed...",
[c]="static assertion failed...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static assertion failed%select{: %1|}0",
[g]="static assertion failed%select{: %1|}0",
[g]=n,
[i]=l,
[h]="static assertion failed(?:\\: (.*?)|)",
[j]="static assertion failed(?:\\: (.*?)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{z,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{z,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n      } else {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}},
[k]={{A,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{A,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n      } else {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "}
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "}
Line 4,093: Line 4,112:
},
},
["err_static_assert_invalid_mem_fn_ret_ty"]={
["err_static_assert_invalid_mem_fn_ret_ty"]={
[i]="the message in a static assertion must have a \'...()\' member function returning an object convertible to \'...\'",
[c]="the message in a static assertion must have a \'...()\' member function returning an object convertible to \'...\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the message in a static assertion must have a \'%select{size|data}0()\' member function returning an object convertible to \'%select{std::size_t|const char *}0\'",
[g]="the message in a static assertion must have a \'%select{size|data}0()\' member function returning an object convertible to \'%select{std::size_t|const char *}0\'",
[g]=n,
[i]=l,
[h]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'",
[j]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[e]={"47ccfd7a89e2",1667306232,sb,sb},
[k]={{z,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n    default:\n      if (Diag)\n        Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{z,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedSize.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{z,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedData.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}},
[k]={{A,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n    default:\n      if (Diag)\n        Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{A,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedSize.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{A,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedData.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}},
[o]={
[o]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"}
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"}
Line 4,108: Line 4,127:
},
},
["err_static_assert_invalid_message"]={
["err_static_assert_invalid_message"]={
[i]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[c]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[g]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[g]=n,
[i]=l,
[h]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions",
[j]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[e]={"47ccfd7a89e2",1667306232,sb,sb},
[k]={{z,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (!RD) {\n    Diag(Loc, diag::err_static_assert_invalid_message);"}},
[k]={{A,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (!RD) {\n    Diag(Loc, diag::err_static_assert_invalid_message);"}},
[o]={
[o]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"}
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"}
Line 4,123: Line 4,142:
},
},
["err_static_assert_message_constexpr"]={
["err_static_assert_message_constexpr"]={
[i]="the message in a static assertion must be produced by a constant expression",
[c]="the message in a static assertion must be produced by a constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the message in a static assertion must be produced by a constant expression",
[g]="the message in a static assertion must be produced by a constant expression",
[g]=n,
[i]=l,
[h]="the message in a static assertion must be produced by a constant expression",
[j]="the message in a static assertion must be produced by a constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[e]={"47ccfd7a89e2",1667306232,sb,sb},
[k]={{z,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n    Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}},
[k]={{A,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n    Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}},
[o]={
[o]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"}
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"}
Line 4,138: Line 4,157:
},
},
["err_static_assert_missing_member_function"]={
["err_static_assert_missing_member_function"]={
[i]="the message object in this static assertion is missing ...",
[c]="the message object in this static assertion is missing ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the message object in this static assertion is missing %select{a \'size()\' member function|a \'data()\' member function|\'data()\' and \'size()\' member functions}0",
[g]="the message object in this static assertion is missing %select{a \'size()\' member function|a \'data()\' member function|\'data()\' and \'size()\' member functions}0",
[g]=n,
[i]=l,
[h]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)",
[j]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[e]={"47ccfd7a89e2",1667306232,sb,sb},
[k]={{z,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (SizeNotFound || DataNotFound) {\n    Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}},
[k]={{A,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (SizeNotFound || DataNotFound) {\n    Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}},
[o]={
[o]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"}
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"}
Line 4,153: Line 4,172:
},
},
["err_static_assert_requirement_failed"]={
["err_static_assert_requirement_failed"]={
[i]="static assertion failed due to requirement \'A\'...",
[c]="static assertion failed due to requirement \'A\'...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static assertion failed due to requirement \'%0\'%select{: %2|}1",
[g]="static assertion failed due to requirement \'%0\'%select{: %2|}1",
[g]=n,
[i]=l,
[h]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)",
[j]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."},
[e]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert.","Diagnostic specific failed condition in a static_assert."},
[k]={{z,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n        Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}},
[k]={{A,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n        Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "}
Line 4,168: Line 4,187:
},
},
["err_static_block_func"]={
["err_static_block_func"]={
[i]="function declared in block scope cannot have \'static\' storage class",
[c]="function declared in block scope cannot have \'static\' storage class",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="function declared in block scope cannot have \'static\' storage class",
[g]="function declared in block scope cannot have \'static\' storage class",
[g]=n,
[i]=l,
[h]="function declared in block scope cannot have \'static\' storage class",
[j]="function declared in block scope cannot have \'static\' storage class",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_static: {\n    if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n      SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}},
[k]={{u,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_static: {\n    if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n      SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}},
[o]={
[o]={
Line 4,183: Line 4,202:
},
},
["err_static_data_member_not_allowed_in_anon_struct"]={
["err_static_data_member_not_allowed_in_anon_struct"]={
[i]="static data member A not allowed in anonymous ...",
[c]="static data member A not allowed in anonymous ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1",
[g]="static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1",
[g]=n,
[i]=l,
[h]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)",
[j]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[e]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding"},
[k]={{u,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n        } else if (AnonStruct) {\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}},
[k]={{u,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n        } else if (AnonStruct) {\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}},
[o]={
[o]={
Line 4,198: Line 4,217:
},
},
["err_static_data_member_not_allowed_in_local_class"]={
["err_static_data_member_not_allowed_in_local_class"]={
[i]="static data member A not allowed in local ... B",
[c]="static data member A not allowed in local ... B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1",
[g]="static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1",
[g]=n,
[i]=l,
[h]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)",
[j]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."},
[e]={"d2e8adfc7599",1245803333,"Support for [class.local]p4.","Support for [class.local]p4."},
[k]={{u,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}},
[k]={{u,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}},
[o]={
[o]={
Line 4,213: Line 4,232:
},
},
["err_static_data_member_reinitialization"]={
["err_static_data_member_reinitialization"]={
[i]="static data member A already has an initializer",
[c]="static data member A already has an initializer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static data member %0 already has an initializer",
[g]="static data member %0 already has an initializer",
[g]=n,
[i]=l,
[h]="static data member (.*?) already has an initializer",
[j]="static data member (.*?) already has an initializer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"},
[e]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static","Provide better diagnostic wording for initializers on static"},
[k]={{u,13249,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}},
[k]={{u,13249,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}},
[o]={
[o]={
Line 4,228: Line 4,247:
},
},
["err_static_downcast_via_virtual"]={
["err_static_downcast_via_virtual"]={
[i]="cannot cast A to B via virtual base C",
[c]="cannot cast A to B via virtual base C",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot cast %0 to %1 via virtual base %2",
[g]="cannot cast %0 to %1 via virtual base %2",
[g]=n,
[i]=l,
[h]="cannot cast (.*?) to (.*?) via virtual base (.*?)",
[j]="cannot cast (.*?) to (.*?) via virtual base (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{lb,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (Paths.getDetectedVirtual() != nullptr) {\n    Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}},
[k]={{rb,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (Paths.getDetectedVirtual() != nullptr) {\n    Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}},
[o]={
[o]={
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"}
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"}
Line 4,243: Line 4,262:
},
},
["err_static_function_scope"]={
["err_static_function_scope"]={
[i]="variables in function scope cannot be declared static",
[c]="variables in function scope cannot be declared static",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="variables in function scope cannot be declared static",
[g]="variables in function scope cannot be declared static",
[g]=n,
[i]=l,
[h]="variables in function scope cannot be declared static",
[j]="variables in function scope cannot be declared static",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[e]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2."},
[k]={{u,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n  // scope.\n  if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n    Diag(NewVD->getLocation(), diag::err_static_function_scope);"}},
[k]={{u,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n  // scope.\n  if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n    Diag(NewVD->getLocation(), diag::err_static_function_scope);"}},
[o]={
[o]={
Line 4,258: Line 4,277:
},
},
["err_static_illegal_in_new"]={
["err_static_illegal_in_new"]={
[i]="the \'static\' modifier for the array size is not legal in new expressions",
[c]="the \'static\' modifier for the array size is not legal in new expressions",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the \'static\' modifier for the array size is not legal in new expressions",
[g]="the \'static\' modifier for the array size is not legal in new expressions",
[g]=n,
[i]=l,
[h]="the \'static\' modifier for the array size is not legal in new expressions",
[j]="the \'static\' modifier for the array size is not legal in new expressions",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{F,1866,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    if (Chunk.Arr.hasStatic)\n      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}}
[k]={{J,1866,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    if (Chunk.Arr.hasStatic)\n      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}}
},
},
["err_static_kernel"]={
["err_static_kernel"]={
[i]="kernel functions cannot be declared static",
[c]="kernel functions cannot be declared static",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="kernel functions cannot be declared static",
[g]="kernel functions cannot be declared static",
[g]=n,
[i]=l,
[h]="kernel functions cannot be declared static",
[j]="kernel functions cannot be declared static",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[e]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2."},
[k]={{u,10691,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n    if (SC == SC_Static) {\n      Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}},
[k]={{u,10691,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n    if (SC == SC_Static) {\n      Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}},
[o]={
[o]={
Line 4,285: Line 4,304:
},
},
["err_static_lambda"]={
["err_static_lambda"]={
[i]="static lambdas are a C++23 extension [-Wc++23-extensions]",
[c]="static lambdas are a C++23 extension [-Wc++23-extensions]",
[d]="warning: ",
[d]="warning: ",
[e]="Warning",
[f]="Warning",
["groups"]={"c++23-extensions","c++2b-extensions"},
["groups"]={"c++23-extensions","c++2b-extensions"},
["maingroup"]="c++23-extensions",
["maingroup"]="c++23-extensions",
[f]="static lambdas are a C++23 extension",
[g]="static lambdas are a C++23 extension",
[g]="(?:warning|error|fatal error)\\: ",
[i]="(?:warning|error|fatal error)\\: ",
[h]="static lambdas are a C\\+\\+23 extension",
[j]="static lambdas are a C\\+\\+23 extension",
[b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]",
[b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]",
[j]=v,
[h]=v,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[e]={"6523814c4e38",1664466303,Gb,Gb},
[k]={{hb,1210,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}},
[k]={{nb,1210,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}},
[o]={
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:1043:33: warning: static lambdas are a C++23 extension [-Wc++23-extensions]"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:1043:33: warning: static lambdas are a C++23 extension [-Wc++23-extensions]"}
Line 4,302: Line 4,321:
},
},
["err_static_lambda_captures"]={
["err_static_lambda_captures"]={
[i]="a static lambda cannot have any captures",
[c]="a static lambda cannot have any captures",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a static lambda cannot have any captures",
[g]="a static lambda cannot have any captures",
[g]=n,
[i]=l,
[h]="a static lambda cannot have any captures",
[j]="a static lambda cannot have any captures",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[e]={"6523814c4e38",1664466303,Gb,Gb},
[k]={{hb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  if (Intro.hasLambdaCapture()) {\n    P.Diag(StaticLoc, diag::err_static_lambda_captures);"}},
[k]={{nb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  if (Intro.hasLambdaCapture()) {\n    P.Diag(StaticLoc, diag::err_static_lambda_captures);"}},
[o]={
[o]={
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"}
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"}
Line 4,317: Line 4,336:
},
},
["err_static_main"]={
["err_static_main"]={
[i]="\'main\' is not allowed to be declared static",
[c]="\'main\' is not allowed to be declared static",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'main\' is not allowed to be declared static",
[g]="\'main\' is not allowed to be declared static",
[g]=n,
[i]=l,
[h]="\'main\' is not allowed to be declared static",
[j]="\'main\' is not allowed to be declared static",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."},
[e]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics."},
[k]={{u,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //  A program that [...] declares main to be inline, static or\n  //  constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //  appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[k]={{u,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //  A program that [...] declares main to be inline, static or\n  //  constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //  appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[o]={
[o]={
Line 4,332: Line 4,351:
},
},
["err_static_mutable_lambda"]={
["err_static_mutable_lambda"]={
[i]="lambda cannot be both mutable and static",
[c]="lambda cannot be both mutable and static",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="lambda cannot be both mutable and static",
[g]="lambda cannot be both mutable and static",
[g]=n,
[i]=l,
[h]="lambda cannot be both mutable and static",
[j]="lambda cannot be both mutable and static",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[e]={"6523814c4e38",1664466303,Gb,Gb},
[k]={{hb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // [expr.prim.lambda.general] p4\n  // The lambda-specifier-seq shall not contain both mutable and static.\n  // If the lambda-specifier-seq contains static, there shall be no\n  // lambda-capture.\n  if (MutableLoc.isValid())\n    P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}},
[k]={{nb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // [expr.prim.lambda.general] p4\n  // The lambda-specifier-seq shall not contain both mutable and static.\n  // If the lambda-specifier-seq contains static, there shall be no\n  // lambda-capture.\n  if (MutableLoc.isValid())\n    P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}},
[o]={
[o]={
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"}
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"}
Line 4,347: Line 4,366:
},
},
["err_static_non_static"]={
["err_static_non_static"]={
[i]="static declaration of A follows non-static declaration",
[c]="static declaration of A follows non-static declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static declaration of %0 follows non-static declaration",
[g]="static declaration of %0 follows non-static declaration",
[g]=n,
[i]=l,
[h]="static declaration of (.*?) follows non\\-static declaration",
[j]="static declaration of (.*?) follows non\\-static declaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,3702,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Don\'t complain about this if we\'re in GNU89 mode and the old function\n  // is an extern inline function.\n  // Don\'t complain about specializations. They are not supposed to have\n  // storage classes.\n  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New;"},{u,4633,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n  if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}},
[k]={{u,3702,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Don\'t complain about this if we\'re in GNU89 mode and the old function\n  // is an extern inline function.\n  // Don\'t complain about specializations. They are not supposed to have\n  // storage classes.\n  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New;"},{u,4633,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n  if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}},
[o]={
[o]={
Line 4,362: Line 4,381:
},
},
["err_static_not_bitfield"]={
["err_static_not_bitfield"]={
[i]="static member A cannot be a bit-field",
[c]="static member A cannot be a bit-field",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static member %0 cannot be a bit-field",
[g]="static member %0 cannot be a bit-field",
[g]=n,
[i]=l,
[h]="static member (.*?) cannot be a bit\\-field",
[j]="static member (.*?) cannot be a bit\\-field",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{z,3626,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n  } else {\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n        Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}},
[k]={{A,3626,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n  } else {\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n        Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"}
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"}
Line 4,377: Line 4,396:
},
},
["err_static_out_of_line"]={
["err_static_out_of_line"]={
[i]="\'static\' can only be specified inside the class definition",
[c]="\'static\' can only be specified inside the class definition",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'static\' can only be specified inside the class definition",
[g]="\'static\' can only be specified inside the class definition",
[g]=n,
[i]=l,
[h]="\'static\' can only be specified inside the class definition",
[j]="\'static\' can only be specified inside the class definition",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Static:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{u,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n      Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
[k]={{u,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Static:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{u,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n      Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
[o]={
[o]={
Line 4,392: Line 4,411:
},
},
["err_static_overrides_virtual"]={
["err_static_overrides_virtual"]={
[i]="\'static\' member function A overrides a virtual function in a base class",
[c]="\'static\' member function A overrides a virtual function in a base class",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'static\' member function %0 overrides a virtual function in a base class",
[g]="\'static\' member function %0 overrides a virtual function in a base class",
[g]=n,
[i]=l,
[h]="\'static\' member function (.*?) overrides a virtual function in a base class",
[j]="\'static\' member function (.*?) overrides a virtual function in a base class",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function"},
[e]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function","Diagnose when a \'static\' member function overrides a virtual function"},
[k]={{z,7018,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // A static function cannot override anything.\n    if (MD->getStorageClass() == SC_Static) {\n      if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}},
[k]={{A,7018,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // A static function cannot override anything.\n    if (MD->getStorageClass() == SC_Static) {\n      if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}},
[o]={
[o]={
["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"}
["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"}
Line 4,407: Line 4,426:
},
},
["err_statically_allocated_object"]={
["err_statically_allocated_object"]={
[i]="interface type cannot be statically allocated",
[c]="interface type cannot be statically allocated",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="interface type cannot be statically allocated",
[g]="interface type cannot be statically allocated",
[g]=n,
[i]=l,
[h]="interface type cannot be statically allocated",
[j]="interface type cannot be statically allocated",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{u,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{u,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n    } else if (FDTy->isObjCObjectType()) {\n      Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{S,608,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  if (T->isObjCObjectType()) {\n    Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}},
[k]={{u,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{u,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n    } else if (FDTy->isObjCObjectType()) {\n      Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{W,608,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  if (T->isObjCObjectType()) {\n    Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}},
[o]={
[o]={
["clang/test/SemaObjC/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"}
["clang/test/SemaObjC/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"}
Line 4,422: Line 4,441:
},
},
["err_std_compare_type_not_supported"]={
["err_std_compare_type_not_supported"]={
[i]="standard library implementation of A is not supported; ...",
[c]="standard library implementation of A is not supported; ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="standard library implementation of %0 is not supported; %select{member \'%2\' does not have expected form|member \'%2\' is missing|the type is not trivially copyable|the type does not have the expected form}1",
[g]="standard library implementation of %0 is not supported; %select{member \'%2\' does not have expected form|member \'%2\' is missing|the type is not trivially copyable|the type does not have the expected form}1",
[g]=n,
[i]=l,
[h]="standard library implementation of (.*?) is not supported; (?:member \'(.*?)\' does not have expected form|member \'(.*?)\' is missing|the type is not trivially copyable|the type does not have the expected form)",
[j]="standard library implementation of (.*?) is not supported; (?:member \'(.*?)\' does not have expected form|member \'(.*?)\' is missing|the type is not trivially copyable|the type does not have the expected form)",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[e]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[k]={{z,11591,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    {\n      auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}},
[k]={{A,11591,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    {\n      auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}},
[o]={
[o]={
["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"}
["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"}
Line 4,437: Line 4,456:
},
},
["err_std_source_location_impl_malformed"]={
["err_std_source_location_impl_malformed"]={
[i]="\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[c]="\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[g]="\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[g]=n,
[i]=l,
[h]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[j]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={Hb,1620118562,Kb},
[e]={Vb,1620118562,fb,fb},
[k]={{q,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // Verify that __impl is a trivial struct type, with no base classes, and with\n  // only the four expected fields.\n  if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{q,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (Count != 4) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}},
[k]={{r,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // Verify that __impl is a trivial struct type, with no base classes, and with\n  // only the four expected fields.\n  if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{r,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (Count != 4) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}},
[o]={
[o]={
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}
Line 4,452: Line 4,471:
},
},
["err_std_source_location_impl_not_found"]={
["err_std_source_location_impl_not_found"]={
[i]="\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[c]="\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[g]="\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[g]=n,
[i]=l,
[h]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[j]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={Hb,1620118562,Kb},
[e]={Vb,1620118562,fb,fb},
[k]={{q,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n    S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}},
[k]={{r,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n    S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}},
[o]={
[o]={
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}
Line 4,467: Line 4,486:
},
},
["err_std_type_trait_not_class_template"]={
["err_std_type_trait_not_class_template"]={
[i]="unsupported standard library implementation: \'std::A\' is not a class template",
[c]="unsupported standard library implementation: \'std::A\' is not a class template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unsupported standard library implementation: \'std::%0\' is not a class template",
[g]="unsupported standard library implementation: \'std::%0\' is not a class template",
[g]=n,
[i]=l,
[h]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template",
[j]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[e]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a","P0217R3: Perform semantic checks and initialization for the bindings in a"},
[k]={{z,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  if (!TraitTD) {\n    S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}}
[k]={{A,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  if (!TraitTD) {\n    S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}}
},
},
["err_stmt_expr_in_default_arg"]={
["err_stmt_expr_in_default_arg"]={
[i]="default ... may not use a GNU statement expression",
[c]="default ... may not use a GNU statement expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="default %select{argument|non-type template argument}0 may not use a GNU statement expression",
[g]="default %select{argument|non-type template argument}0 may not use a GNU statement expression",
[g]=n,
[i]=l,
[h]="default (?:argument|non\\-type template argument) may not use a GNU statement expression",
[j]="default (?:argument|non\\-type template argument) may not use a GNU statement expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Hb,1620118562,Kb},
[e]={Vb,1620118562,fb,fb},
[k]={{T,7470,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    } else {\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        } else {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n          } else {\n            if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n              Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{Cb,1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n///      template-parameter:\n///        ...\n///        parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n      Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}},
[k]={{Y,7470,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    } else {\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        } else {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n          } else {\n            if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n              Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{bc,1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n///      template-parameter:\n///        ...\n///        parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n      Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}},
[o]={
[o]={
["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"}
["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"}
Line 4,494: Line 4,513:
},
},
["err_stmtexpr_file_scope"]={
["err_stmtexpr_file_scope"]={
[i]="statement expression not allowed at file scope",
[c]="statement expression not allowed at file scope",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="statement expression not allowed at file scope",
[g]="statement expression not allowed at file scope",
[g]=n,
[i]=l,
[h]="statement expression not allowed at file scope",
[j]="statement expression not allowed at file scope",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///      primary-expression: [C99 6.5.1]\n///        \'(\' expression \')\'\n/// [GNU]  \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///      postfix-expression: [C99 6.5.2]\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///      cast-expression: [C99 6.5.4]\n///        \'(\' type-name \')\' cast-expression\n/// [ARC]  bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///        (__bridge type-name) cast-expression\n///        (__bridge_transfer type-name) cast-expression\n///        (__bridge_retained type-name) cast-expression\n///      fold-expression: [C++1z]\n///        \'(\' cast-expression fold-operator \'...\' \')\'\n///        \'(\' \'...\' fold-operator cast-expression \')\'\n///        \'(\' cast-expression fold-operator \'...\'\n///                fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///      \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  // None of these cases should fall through with an invalid Result\n  // unless they\'ve already reported an error.\n  if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n    if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n      Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}},
[k]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///      primary-expression: [C99 6.5.1]\n///        \'(\' expression \')\'\n/// [GNU]  \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///      postfix-expression: [C99 6.5.2]\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///      cast-expression: [C99 6.5.4]\n///        \'(\' type-name \')\' cast-expression\n/// [ARC]  bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///        (__bridge type-name) cast-expression\n///        (__bridge_transfer type-name) cast-expression\n///        (__bridge_retained type-name) cast-expression\n///      fold-expression: [C++1z]\n///        \'(\' cast-expression fold-operator \'...\' \')\'\n///        \'(\' \'...\' fold-operator cast-expression \')\'\n///        \'(\' cast-expression fold-operator \'...\'\n///                fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///      \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  // None of these cases should fall through with an invalid Result\n  // unless they\'ve already reported an error.\n  if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n    if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n      Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}},
[o]={
[o]={
Line 4,509: Line 4,528:
},
},
["err_storage_class_for_static_member"]={
["err_storage_class_for_static_member"]={
[i]="static data member definition cannot specify a storage class",
[c]="static data member definition cannot specify a storage class",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="static data member definition cannot specify a storage class",
[g]="static data member definition cannot specify a storage class",
[g]=n,
[i]=l,
[h]="static data member definition cannot specify a storage class",
[j]="static data member definition cannot specify a storage class",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"45f96f87c3cf",1371649314,"Fix pr16354."},
[e]={"45f96f87c3cf",1371649314,"Fix pr16354.","Fix pr16354."},
[k]={{u,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Extern:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
[k]={{u,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Extern:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
[o]={
[o]={
Line 4,524: Line 4,543:
},
},
["err_storage_spec_on_catch_parm"]={
["err_storage_spec_on_catch_parm"]={
[i]="@catch parameter cannot have storage specifier \'A\'",
[c]="@catch parameter cannot have storage specifier \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="@catch parameter cannot have storage specifier \'%0\'",
[g]="@catch parameter cannot have storage specifier \'%0\'",
[g]=n,
[i]=l,
[h]="@catch parameter cannot have storage specifier \'(.*?)\'",
[j]="@catch parameter cannot have storage specifier \'(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[e]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from"},
[k]={{Z,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // We allow the \"register\" storage class on exception variables because\n  // GCC did, but we drop it completely. Any other storage class is an error.\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n  } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}},
[k]={{eb,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // We allow the \"register\" storage class on exception variables because\n  // GCC did, but we drop it completely. Any other storage class is an error.\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n  } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}},
[o]={
[o]={
["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"}
["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"}
Line 4,539: Line 4,558:
},
},
["err_storageclass_invalid_for_member"]={
["err_storageclass_invalid_for_member"]={
[i]="storage class specified for a member declaration",
[c]="storage class specified for a member declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="storage class specified for a member declaration",
[g]="storage class specified for a member declaration",
[g]=n,
[i]=l,
[h]="storage class specified for a member declaration",
[j]="storage class specified for a member declaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{z,3495,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  default:\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}},
[k]={{A,3495,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  default:\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"}
["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"}
Line 4,554: Line 4,573:
},
},
["err_store_value_to_reg"]={
["err_store_value_to_reg"]={
[i]="impossible constraint in asm: can\'t store value into a register",
[c]="impossible constraint in asm: can\'t store value into a register",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="impossible constraint in asm: can\'t store value into a register",
[g]="impossible constraint in asm: can\'t store value into a register",
[g]=n,
[i]=l,
[h]="impossible constraint in asm\\: can\'t store value into a register",
[j]="impossible constraint in asm\\: can\'t store value into a register",
[b]=a,
[b]=a,
[j]="Inline Assembly Issue",
[h]="Inline Assembly Issue",
[c]={Hb,1620118562,Kb},
[e]={Vb,1620118562,fb,fb},
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n  for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n    // ResultTypeRequiresCast elements correspond to the first\n    // ResultTypeRequiresCast.size() elements of RegResults.\n    if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n      if (Ty.isNull()) {\n        CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    // If the smaller value wasn\'t mentioned in the asm string, and if the\n    // output was a register, just extend the shorter one to the size of the\n    // larger one.\n    if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n      // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n      // crash when the size larger than the register size. So we limit it here.\n      if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n        targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}},
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n  for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n    // ResultTypeRequiresCast elements correspond to the first\n    // ResultTypeRequiresCast.size() elements of RegResults.\n    if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n      if (Ty.isNull()) {\n        CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    // If the smaller value wasn\'t mentioned in the asm string, and if the\n    // output was a register, just extend the shorter one to the size of the\n    // larger one.\n    if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n      // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n      // crash when the size larger than the register size. So we limit it here.\n      if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n        targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}},
[o]={
[o]={
Line 4,569: Line 4,588:
},
},
["err_string_concat_mixed_suffix"]={
["err_string_concat_mixed_suffix"]={
[i]="differing user-defined suffixes (\'A\' and \'B\') in string literal concatenation",
[c]="differing user-defined suffixes (\'A\' and \'B\') in string literal concatenation",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation",
[g]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation",
[g]=n,
[i]=l,
[h]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation",
[j]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token"},
[e]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token","Lexing support for user-defined literals. Currently these lex as the same token"},
[k]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n    // Remove an optional ud-suffix.\n    if (ThisTokEnd[-1] != \'\"\') {\n      if (UDSuffixBuf.empty()) {\n      } else {\n        if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n          if (Diags) {\n            if (UnevaluatedStringHasUDL) {\n            } else {\n              Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}},
[k]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n    // Remove an optional ud-suffix.\n    if (ThisTokEnd[-1] != \'\"\') {\n      if (UDSuffixBuf.empty()) {\n      } else {\n        if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n          if (Diags) {\n            if (UnevaluatedStringHasUDL) {\n            } else {\n              Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}},
[o]={
[o]={
Line 4,584: Line 4,603:
},
},
["err_strong_property"]={
["err_strong_property"]={
[i]="existing instance variable A for strong property B may not be __weak",
[c]="existing instance variable A for strong property B may not be __weak",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="existing instance variable %1 for strong property %0 may not be __weak",
[g]="existing instance variable %1 for strong property %0 may not be __weak",
[g]=n,
[i]=l,
[h]="existing instance variable (.*?) for strong property (.*?) may not be __weak",
[j]="existing instance variable (.*?) for strong property (.*?) may not be __weak",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{S,1410,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // Fall thru - see previous comment\n      if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n        Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}},
[k]={{W,1410,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // Fall thru - see previous comment\n      if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n        Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}},
[o]={
[o]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"}
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"}
Line 4,599: Line 4,618:
},
},
["err_subscript_function_type"]={
["err_subscript_function_type"]={
[i]="subscript of pointer to function type A",
[c]="subscript of pointer to function type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="subscript of pointer to function type %0",
[g]="subscript of pointer to function type %0",
[g]=n,
[i]=l,
[h]="subscript of pointer to function type (.*?)",
[j]="subscript of pointer to function type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for"},
[e]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for","Make sure to use RequireCompleteType rather than testing for"},
[k]={{q,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n  // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n  // type. Note that Functions are not objects, and that (in C99 parlance)\n  // incomplete types are not object types.\n  if (ResultType->isFunctionType()) {\n    Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}}
[k]={{r,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n  // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n  // type. Note that Functions are not objects, and that (in C99 parlance)\n  // incomplete types are not object types.\n  if (ResultType->isFunctionType()) {\n    Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}}
},
},
["err_subscript_incomplete_or_sizeless_type"]={
["err_subscript_incomplete_or_sizeless_type"]={
[i]="subscript of pointer to ... type A",
[c]="subscript of pointer to ... type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="subscript of pointer to %select{incomplete|sizeless}0 type %1",
[g]="subscript of pointer to %select{incomplete|sizeless}0 type %1",
[g]=n,
[i]=l,
[h]="subscript of pointer to (?:incomplete|sizeless) type (.*?)",
[j]="subscript of pointer to (?:incomplete|sizeless) type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}},
[k]={{r,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}},
[o]={
[o]={
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"}
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"}
Line 4,626: Line 4,645:
},
},
["err_subscript_nonfragile_interface"]={
["err_subscript_nonfragile_interface"]={
[i]="subscript requires size of interface A, which is not constant for this architecture and platform",
[c]="subscript requires size of interface A, which is not constant for this architecture and platform",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="subscript requires size of interface %0, which is not constant for this architecture and platform",
[g]="subscript requires size of interface %0, which is not constant for this architecture and platform",
[g]=n,
[i]=l,
[h]="subscript requires size of interface (.*?), which is not constant for this architecture and platform",
[j]="subscript requires size of interface (.*?), which is not constant for this architecture and platform",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"},
[e]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode","Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"},
[k]={{q,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n    if (!LangOpts.isSubscriptPointerArithmetic()) {\n      Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}}
[k]={{r,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n    if (!LangOpts.isSubscriptPointerArithmetic()) {\n      Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}}
},
},
["err_subscript_svbool_t"]={
["err_subscript_svbool_t"]={
[i]="subscript of svbool_t is not allowed",
[c]="subscript of svbool_t is not allowed",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="subscript of svbool_t is not allowed",
[g]="subscript of svbool_t is not allowed",
[g]=n,
[i]=l,
[h]="subscript of svbool_t is not allowed",
[j]="subscript of svbool_t is not allowed",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[e]={"cb08f4aa4467",1620530452,Ab,Ab},
[k]={{q,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n    if (BTy->isSVEBool())\n      return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
[k]={{r,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n    if (BTy->isSVEBool())\n      return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
[o]={
[o]={
["clang/test/Sema/aarch64-sve-vector-subscript-ops.c"]={"clang/test/Sema/aarch64-sve-vector-subscript-ops.c:11:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:12:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:13:10: error: subscript of svbool_t is not allowed"}
["clang/test/Sema/aarch64-sve-vector-subscript-ops.c"]={"clang/test/Sema/aarch64-sve-vector-subscript-ops.c:11:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:12:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:13:10: error: subscript of svbool_t is not allowed"}
Line 4,653: Line 4,672:
},
},
["err_super_in_lambda_unsupported"]={
["err_super_in_lambda_unsupported"]={
[i]="use of \'__super\' inside a lambda is unsupported",
[c]="use of \'__super\' inside a lambda is unsupported",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="use of \'__super\' inside a lambda is unsupported",
[g]="use of \'__super\' inside a lambda is unsupported",
[g]=n,
[i]=l,
[h]="use of \'__super\' inside a lambda is unsupported",
[j]="use of \'__super\' inside a lambda is unsupported",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[e]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236)."},
[k]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",316,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  if (getCurLambda()) {\n    Diag(SuperLoc, diag::err_super_in_lambda_unsupported);"}},
[k]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",316,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  if (getCurLambda()) {\n    Diag(SuperLoc, diag::err_super_in_lambda_unsupported);"}},
[o]={
[o]={
Line 4,668: Line 4,687:
},
},
["err_super_in_using_declaration"]={
["err_super_in_using_declaration"]={
[i]="\'__super\' cannot be used with a using declaration",
[c]="\'__super\' cannot be used with a using declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'__super\' cannot be used with a using declaration",
[g]="\'__super\' cannot be used with a using declaration",
[g]=n,
[i]=l,
[h]="\'__super\' cannot be used with a using declaration",
[j]="\'__super\' cannot be used with a using declaration",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[e]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236)."},
[k]={{eb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  if (Tok.is(tok::kw___super)) {\n    Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}},
[k]={{jb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  if (Tok.is(tok::kw___super)) {\n    Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}},
[o]={
[o]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"}
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"}
Line 4,683: Line 4,702:
},
},
["err_sve_vector_in_non_sve_target"]={
["err_sve_vector_in_non_sve_target"]={
[i]="SVE vector type A cannot be used in a target without sve",
[c]="SVE vector type A cannot be used in a target without sve",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="SVE vector type %0 cannot be used in a target without sve",
[g]="SVE vector type %0 cannot be used in a target without sve",
[g]=n,
[i]=l,
[h]="SVE vector type (.*?) cannot be used in a target without sve",
[j]="SVE vector type (.*?) cannot be used in a target without sve",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{mb,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // Don\'t allow SVE types in functions without a SVE target.\n    if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n      if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n        Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{u,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // Check that SVE types are only used in functions with SVE available.\n  if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n    if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n      Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}},
[k]={{yb,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // Don\'t allow SVE types in functions without a SVE target.\n    if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n      if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n        Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{u,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // Check that SVE types are only used in functions with SVE available.\n  if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n    if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n      Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}},
[o]={
[o]={
["clang/test/Sema/arm-sve-target.cpp"]={"clang/test/Sema/arm-sve-target.cpp:6:17: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:25:15: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:34:6: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:42:23: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:41:21: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve"}
["clang/test/Sema/arm-sve-target.cpp"]={"clang/test/Sema/arm-sve-target.cpp:6:17: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:25:15: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:34:6: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:42:23: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:41:21: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve"}
Line 4,698: Line 4,717:
},
},
["err_swift_abi_parameter_wrong_type"]={
["err_swift_abi_parameter_wrong_type"]={
[i]="\'A\' parameter must have pointer... type; type here is B",
[c]="\'A\' parameter must have pointer... type; type here is B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'%0\' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2",
[g]="\'%0\' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2",
[g]=n,
[i]=l,
[h]="\'(.*?)\' parameter must have pointer(?:| to unqualified pointer) type; type here is (.*?)",
[j]="\'(.*?)\' parameter must have pointer(?:| to unqualified pointer) type; type here is (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[e]={"477f2bb0d53c",1456987172,tb,tb},
[k]={{Q,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{Q,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftAsyncContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{Q,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftErrorResult:\n    if (!isValidSwiftErrorResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{Q,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftIndirectResult:\n    if (!isValidSwiftIndirectResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}},
[k]={{V,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{V,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftAsyncContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{V,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftErrorResult:\n    if (!isValidSwiftErrorResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{V,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftIndirectResult:\n    if (!isValidSwiftIndirectResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}},
[o]={
[o]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:21:31: error: \'swift_indirect_result\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:29:51: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:30:52: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int *\'","clang/test/SemaCXX/attr-swiftcall.cpp:35:23: error: \'swift_context\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:42:29: error: \'swift_async_context\' parameter must have pointer type; type here is \'int\'"}
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:21:31: error: \'swift_indirect_result\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:29:51: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:30:52: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int *\'","clang/test/SemaCXX/attr-swiftcall.cpp:35:23: error: \'swift_context\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:42:29: error: \'swift_async_context\' parameter must have pointer type; type here is \'int\'"}
Line 4,713: Line 4,732:
},
},
["err_swift_async_bad_block_type"]={
["err_swift_async_bad_block_type"]={
[i]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is A",
[c]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is %0",
[g]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is %0",
[g]=n,
[i]=l,
[h]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is (.*?)",
[j]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{Q,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!CompletionBlockType->isBlockPointerType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{Q,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}},
[k]={{V,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!CompletionBlockType->isBlockPointerType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{V,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}},
[o]={
[o]={
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:12:32: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int\'","clang/test/SemaObjC/attr-swift-async.m:13:39: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:23:26: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:36:43: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'"}
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:12:32: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int\'","clang/test/SemaObjC/attr-swift-async.m:13:39: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:23:26: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:36:43: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'"}
Line 4,728: Line 4,747:
},
},
["err_swift_async_error_no_error_parameter"]={
["err_swift_async_error_no_error_parameter"]={
[i]="A attribute with \'nonnull_error\' convention can only be applied to a ... with a completion handler with an error parameter",
[c]="A attribute with \'nonnull_error\' convention can only be applied to a ... with a completion handler with an error parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 attribute with \'nonnull_error\' convention can only be applied to a %select{function|method}1 with a completion handler with an error parameter",
[g]="%0 attribute with \'nonnull_error\' convention can only be applied to a %select{function|method}1 with a completion handler with an error parameter",
[g]=n,
[i]=l,
[h]="(.*?) attribute with \'nonnull_error\' convention can only be applied to a (?:function|method) with a completion handler with an error parameter",
[j]="(.*?) attribute with \'nonnull_error\' convention can only be applied to a (?:function|method) with a completion handler with an error parameter",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{Q,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonNullError: {\n    if (!AnyErrorParams) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}},
[k]={{V,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonNullError: {\n    if (!AnyErrorParams) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}},
[o]={
[o]={
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:37:1: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a function with a completion handler with an error parameter","clang/test/SemaObjC/attr-swift-async-error.m:89:3: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a method with a completion handler with an error parameter"}
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:37:1: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a function with a completion handler with an error parameter","clang/test/SemaObjC/attr-swift-async-error.m:89:3: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a method with a completion handler with an error parameter"}
Line 4,743: Line 4,762:
},
},
["err_swift_async_error_non_integral"]={
["err_swift_async_error_non_integral"]={
[i]="A attribute with \'B\' convention must have an integral-typed parameter in completion handler at index C, type here is D",
[c]="A attribute with \'B\' convention must have an integral-typed parameter in completion handler at index C, type here is D",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 attribute with \'%1\' convention must have an integral-typed parameter in completion handler at index %2, type here is %3",
[g]="%0 attribute with \'%1\' convention must have an integral-typed parameter in completion handler at index %2, type here is %3",
[g]=n,
[i]=l,
[h]="(.*?) attribute with \'(.*?)\' convention must have an integral\\-typed parameter in completion handler at index (.*?), type here is (.*?)",
[j]="(.*?) attribute with \'(.*?)\' convention must have an integral\\-typed parameter in completion handler at index (.*?), type here is (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{Q,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonZeroArgument: {\n    if (!ErrorParam->isIntegralType(S.Context)) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}},
[k]={{V,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonZeroArgument: {\n    if (!ErrorParam->isIntegralType(S.Context)) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}},
[o]={
[o]={
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:41:1: error: \'swift_async_error\' attribute with \'zero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'","clang/test/SemaObjC/attr-swift-async-error.m:81:3: error: \'swift_async_error\' attribute with \'nonzero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'"}
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:41:1: error: \'swift_async_error\' attribute with \'zero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'","clang/test/SemaObjC/attr-swift-async-error.m:81:3: error: \'swift_async_error\' attribute with \'nonzero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'"}
Line 4,758: Line 4,777:
},
},
["err_swift_async_error_without_swift_async"]={
["err_swift_async_error_without_swift_async"]={
[i]="A attribute must be applied to a ... annotated with non-\'none\' attribute \'swift_async\'",
[c]="A attribute must be applied to a ... annotated with non-\'none\' attribute \'swift_async\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 attribute must be applied to a %select{function|method}1 annotated with non-\'none\' attribute \'swift_async\'",
[g]="%0 attribute must be applied to a %select{function|method}1 annotated with non-\'none\' attribute \'swift_async\'",
[g]=n,
[i]=l,
[h]="(.*?) attribute must be applied to a (?:function|method) annotated with non\\-\'none\' attribute \'swift_async\'",
[j]="(.*?) attribute must be applied to a (?:function|method) annotated with non\\-\'none\' attribute \'swift_async\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{Q,6463,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  if (AsyncAttr->getKind() == SwiftAsyncAttr::None) {\n    if (ErrorAttr->getConvention() != SwiftAsyncErrorAttr::None) {\n      S.Diag(AsyncAttr->getLocation(), diag::err_swift_async_error_without_swift_async) << AsyncAttr << isa<ObjCMethodDecl>(D);"}}
[k]={{V,6463,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  if (AsyncAttr->getKind() == SwiftAsyncAttr::None) {\n    if (ErrorAttr->getConvention() != SwiftAsyncErrorAttr::None) {\n      S.Diag(AsyncAttr->getLocation(), diag::err_swift_async_error_without_swift_async) << AsyncAttr << isa<ObjCMethodDecl>(D);"}}
},
},
["err_swift_async_no_access"]={
["err_swift_async_no_access"]={
[i]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[c]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[g]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[g]=n,
[i]=l,
[h]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[j]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{Q,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}},
[k]={{V,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}},
[o]={
[o]={
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:20:1: error: first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:20:1: error: first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}
Line 4,785: Line 4,804:
},
},
["err_swift_error_result_not_after_swift_context"]={
["err_swift_error_result_not_after_swift_context"]={
[i]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[c]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[g]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[g]=n,
[i]=l,
[h]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[j]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[e]={"477f2bb0d53c",1456987172,tb,tb},
[k]={{G,3005,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // swift_error parameters must be preceded by a swift_context parameter.\n    case ParameterABI::SwiftErrorResult:\n      if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n        S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}},
[k]={{K,3005,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // swift_error parameters must be preceded by a swift_context parameter.\n    case ParameterABI::SwiftErrorResult:\n      if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n        S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}},
[o]={
[o]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter","clang/test/SemaCXX/attr-swiftcall.cpp:28:64: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter"}
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter","clang/test/SemaCXX/attr-swiftcall.cpp:28:64: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter"}
Line 4,800: Line 4,819:
},
},
["err_swift_indirect_result_not_first"]={
["err_swift_indirect_result_not_first"]={
[i]="\'swift_indirect_result\' parameters must be first parameters of function",
[c]="\'swift_indirect_result\' parameters must be first parameters of function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'swift_indirect_result\' parameters must be first parameters of function",
[g]="\'swift_indirect_result\' parameters must be first parameters of function",
[g]=n,
[i]=l,
[h]="\'swift_indirect_result\' parameters must be first parameters of function",
[j]="\'swift_indirect_result\' parameters must be first parameters of function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[e]={"477f2bb0d53c",1456987172,tb,tb},
[k]={{G,2986,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // swift_indirect_result parameters must be a prefix of the function\n    // arguments.\n    case ParameterABI::SwiftIndirectResult:\n      if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n        S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}},
[k]={{K,2986,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // swift_indirect_result parameters must be a prefix of the function\n    // arguments.\n    case ParameterABI::SwiftIndirectResult:\n      if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n        S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}},
[o]={
[o]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:20:68: error: \'swift_indirect_result\' parameters must be first parameters of function"}
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:20:68: error: \'swift_indirect_result\' parameters must be first parameters of function"}
Line 4,815: Line 4,834:
},
},
["err_swift_param_attr_not_swiftcall"]={
["err_swift_param_attr_not_swiftcall"]={
[i]="\'A\' parameter can only be used with swiftcall... calling convention...",
[c]="\'A\' parameter can only be used with swiftcall... calling convention...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'%0\' parameter can only be used with swiftcall%select{ or swiftasynccall|}1 calling convention%select{|s}1",
[g]="\'%0\' parameter can only be used with swiftcall%select{ or swiftasynccall|}1 calling convention%select{|s}1",
[g]=n,
[i]=l,
[h]="\'(.*?)\' parameter can only be used with swiftcall(?: or swiftasynccall|) calling convention(?:|s)",
[j]="\'(.*?)\' parameter can only be used with swiftcall(?: or swiftasynccall|) calling convention(?:|s)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[e]={"477f2bb0d53c",1456987172,tb,tb},
[k]={{G,2966,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n    S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}},
[k]={{K,2966,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n    S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}},
[o]={
[o]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:19:53: error: \'swift_indirect_result\' parameter can only be used with swiftcall or swiftasynccall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter can only be used with swiftcall calling conventions","clang/test/SemaCXX/attr-swiftcall.cpp:34:37: error: \'swift_context\' parameter can only be used with swiftcall or swiftasynccall calling convention"}
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:19:53: error: \'swift_indirect_result\' parameter can only be used with swiftcall or swiftasynccall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter can only be used with swiftcall calling conventions","clang/test/SemaCXX/attr-swiftcall.cpp:34:37: error: \'swift_context\' parameter can only be used with swiftcall or swiftasynccall calling convention"}
Line 4,830: Line 4,849:
},
},
["err_switch_explicit_conversion"]={
["err_switch_explicit_conversion"]={
[i]="switch condition type A requires explicit conversion to B",
[c]="switch condition type A requires explicit conversion to B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="switch condition type %0 requires explicit conversion to %1",
[g]="switch condition type %0 requires explicit conversion to %1",
[g]=n,
[i]=l,
[h]="switch condition type (.*?) requires explicit conversion to (.*?)",
[j]="switch condition type (.*?) requires explicit conversion to (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[e]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an"},
[k]={{N,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}},
[k]={{T,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}},
[o]={
[o]={
["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:9:3: error: switch condition type \'A\' requires explicit conversion to \'int\'"}
["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:9:3: error: switch condition type \'A\' requires explicit conversion to \'int\'"}
Line 4,845: Line 4,864:
},
},
["err_switch_incomplete_class_type"]={
["err_switch_incomplete_class_type"]={
[i]="switch condition has incomplete class type A",
[c]="switch condition has incomplete class type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="switch condition has incomplete class type %0",
[g]="switch condition has incomplete class type %0",
[g]=n,
[i]=l,
[h]="switch condition has incomplete class type (.*?)",
[j]="switch condition has incomplete class type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion"},
[e]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion","Require a class type to be complete before probing its conversion"},
[k]={{N,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}},
[k]={{T,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}},
[o]={
[o]={
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"}
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"}
Line 4,860: Line 4,879:
},
},
["err_switch_into_protected_scope"]={
["err_switch_into_protected_scope"]={
[i]="cannot jump from switch statement to this case label",
[c]="cannot jump from switch statement to this case label",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot jump from switch statement to this case label",
[g]="cannot jump from switch statement to this case label",
[g]=n,
[i]=l,
[h]="cannot jump from switch statement to this case label",
[j]="cannot jump from switch statement to this case label",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors."},
[e]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors.","first step to getting switches giving \"jump into vla scope\" errors."},
[k]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n  ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n    while (I != E) {\n      if (I->getID() == diag::err_switch_into_protected_scope && isInRange(I->getLocation(), BodyRange)) {"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",134,"class ProtectedScopeFixer {\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    if (handledAllNotes)\n      Pass.TA.clearDiagnostic(diag::err_switch_into_protected_scope, ErrLoc);"},{"clang/lib/Sema/JumpDiagnostics.cpp",712,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}},
[k]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n  ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n    while (I != E) {\n      if (I->getID() == diag::err_switch_into_protected_scope && isInRange(I->getLocation(), BodyRange)) {"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",134,"class ProtectedScopeFixer {\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    if (handledAllNotes)\n      Pass.TA.clearDiagnostic(diag::err_switch_into_protected_scope, ErrLoc);"},{"clang/lib/Sema/JumpDiagnostics.cpp",712,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}},
[o]={
[o]={
Line 4,875: Line 4,894:
},
},
["err_switch_multiple_conversions"]={
["err_switch_multiple_conversions"]={
[i]="multiple conversions from switch condition type A to an integral or enumeration type",
[c]="multiple conversions from switch condition type A to an integral or enumeration type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="multiple conversions from switch condition type %0 to an integral or enumeration type",
[g]="multiple conversions from switch condition type %0 to an integral or enumeration type",
[g]=n,
[i]=l,
[h]="multiple conversions from switch condition type (.*?) to an integral or enumeration type",
[j]="multiple conversions from switch condition type (.*?) to an integral or enumeration type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[e]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an"},
[k]={{N,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}},
[k]={{T,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}},
[o]={
[o]={
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:33:3: error: multiple conversions from switch condition type \'B\' to an integral or enumeration type"}
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:33:3: error: multiple conversions from switch condition type \'B\' to an integral or enumeration type"}
Line 4,890: Line 4,909:
},
},
["err_sycl_special_type_num_init_method"]={
["err_sycl_special_type_num_init_method"]={
[i]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[c]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[g]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[g]=n,
[i]=l,
[h]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[j]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={Fb,1616787805,Gb},
[e]={Yb,1616787805,mb,mb},
[k]={{u,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n  if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n    if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n      if (NumInitMethods > 1 || !Def->hasInitMethod())\n        Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}},
[k]={{u,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n  if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n    if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n      if (NumInitMethods > 1 || !Def->hasInitMethod())\n        Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}},
[o]={
[o]={
Line 4,905: Line 4,924:
},
},
["err_synthesize_category_decl"]={
["err_synthesize_category_decl"]={
[i]="@synthesize not allowed in a category\'s implementation",
[c]="@synthesize not allowed in a category\'s implementation",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="@synthesize not allowed in a category\'s implementation",
[g]="@synthesize not allowed in a category\'s implementation",
[g]=n,
[i]=l,
[h]="@synthesize not allowed in a category\'s implementation",
[j]="@synthesize not allowed in a category\'s implementation",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{S,1176,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    if (Synthesize) {\n      Diag(AtLoc, diag::err_synthesize_category_decl);"}},
[k]={{W,1176,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    if (Synthesize) {\n      Diag(AtLoc, diag::err_synthesize_category_decl);"}},
[o]={
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"}
Line 4,920: Line 4,939:
},
},
["err_synthesize_on_class_property"]={
["err_synthesize_on_class_property"]={
[i]="@synthesize not allowed on a class property A",
[c]="@synthesize not allowed on a class property A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="@synthesize not allowed on a class property %0",
[g]="@synthesize not allowed on a class property %0",
[g]=n,
[i]=l,
[h]="@synthesize not allowed on a class property (.*?)",
[j]="@synthesize not allowed on a class property (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Y,1480718311,X},
[e]={bb,1480718311,L,L},
[k]={{S,1118,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (property->isClassProperty() && Synthesize) {\n      Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}},
[k]={{W,1118,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (property->isClassProperty() && Synthesize) {\n      Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}},
[o]={
[o]={
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:32:16: error: @synthesize not allowed on a class property \'c2\'"}
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:32:16: error: @synthesize not allowed on a class property \'c2\'"}
Line 4,935: Line 4,954:
},
},
["err_synthesize_variable_sized_ivar"]={
["err_synthesize_variable_sized_ivar"]={
[i]="synthesized property with variable size type A requires an existing instance variable",
[c]="synthesized property with variable size type A requires an existing instance variable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="synthesized property with variable size type %0 requires an existing instance variable",
[g]="synthesized property with variable size type %0 requires an existing instance variable",
[g]=n,
[i]=l,
[h]="synthesized property with variable size type (.*?) requires an existing instance variable",
[j]="synthesized property with variable size type (.*?) requires an existing instance variable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[e]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C."},
[k]={{S,1335,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (!CompleteTypeErr) {\n        if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n          Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}},
[k]={{W,1335,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (!CompleteTypeErr) {\n        if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n          Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}},
[o]={
[o]={
["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:214:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable","clang/test/SemaObjC/flexible-array.m:220:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable"}
["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:214:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable","clang/test/SemaObjC/flexible-array.m:220:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable"}
Line 4,950: Line 4,969:
},
},
["err_synthesized_property_name"]={
["err_synthesized_property_name"]={
[i]="expected a property name in @synthesize",
[c]="expected a property name in @synthesize",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expected a property name in @synthesize",
[g]="expected a property name in @synthesize",
[g]=n,
[i]=l,
[h]="expected a property name in @synthesize",
[j]="expected a property name in @synthesize",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions"},
[e]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions","Improve diagnostics and recovery when parsing @synthesized definitions"},
[k]={{"clang/lib/Parse/ParseObjc.cpp",2385,"///  property-synthesis:\n///    @synthesize property-ivar-list \';\'\n///\n///  property-ivar-list:\n///    property-ivar\n///    property-ivar-list \',\' property-ivar\n///\n///  property-ivar:\n///    identifier\n///    identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n  while (true) {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_synthesized_property_name);"}},
[k]={{"clang/lib/Parse/ParseObjc.cpp",2385,"///  property-synthesis:\n///    @synthesize property-ivar-list \';\'\n///\n///  property-ivar-list:\n///    property-ivar\n///    property-ivar-list \',\' property-ivar\n///\n///  property-ivar:\n///    identifier\n///    identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n  while (true) {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_synthesized_property_name);"}},
[o]={
[o]={
Line 4,965: Line 4,984:
},
},
["err_synthesizing_arc_weak_property_disabled"]={
["err_synthesizing_arc_weak_property_disabled"]={
[i]="cannot synthesize weak property in file using manual reference counting",
[c]="cannot synthesize weak property in file using manual reference counting",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot synthesize weak property in file using manual reference counting",
[g]="cannot synthesize weak property in file using manual reference counting",
[g]=n,
[i]=l,
[h]="cannot synthesize weak property in file using manual reference counting",
[j]="cannot synthesize weak property in file using manual reference counting",
[b]=a,
[b]=a,
[j]="ARC Weak References",
[h]="ARC Weak References",
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[e]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[k]={{S,1253,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}},
[k]={{W,1253,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}},
[o]={
[o]={
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:28:13: error: cannot synthesize weak property in file using manual reference counting","clang/test/SemaObjC/mrc-no-weak.m:34:1: error: cannot synthesize weak property in file using manual reference counting"}
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:28:13: error: cannot synthesize weak property in file using manual reference counting","clang/test/SemaObjC/mrc-no-weak.m:34:1: error: cannot synthesize weak property in file using manual reference counting"}
Line 4,980: Line 4,999:
},
},
["err_synthesizing_arc_weak_property_no_runtime"]={
["err_synthesizing_arc_weak_property_no_runtime"]={
[i]="cannot synthesize weak property because the current deployment target does not support weak references",
[c]="cannot synthesize weak property because the current deployment target does not support weak references",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot synthesize weak property because the current deployment target does not support weak references",
[g]="cannot synthesize weak property because the current deployment target does not support weak references",
[g]=n,
[i]=l,
[h]="cannot synthesize weak property because the current deployment target does not support weak references",
[j]="cannot synthesize weak property because the current deployment target does not support weak references",
[b]=a,
[b]=a,
[j]="ARC Weak References",
[h]="ARC Weak References",
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[e]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[k]={{S,1254,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}},
[k]={{W,1254,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}},
[o]={
[o]={
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:60:13: error: cannot synthesize weak property because the current deployment target does not support weak references"}
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:60:13: error: cannot synthesize weak property because the current deployment target does not support weak references"}
Line 4,995: Line 5,014:
},
},
["err_systemz_invalid_tabort_code"]={
["err_systemz_invalid_tabort_code"]={
[i]="invalid transaction abort code",
[c]="invalid transaction abort code",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid transaction abort code",
[g]="invalid transaction abort code",
[g]=n,
[i]=l,
[h]="invalid transaction abort code",
[j]="invalid transaction abort code",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"},
[e]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12","[SystemZ] Support transactional execution on zEC12"},
[k]={{w,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == SystemZ::BI__builtin_tabort) {\n    if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n      if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n        return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}},
[k]={{w,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == SystemZ::BI__builtin_tabort) {\n    if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n      if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n        return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}},
[o]={
[o]={
Line 5,010: Line 5,029:
},
},
["err_tag_definition_of_typedef"]={
["err_tag_definition_of_typedef"]={
[i]="definition of type A conflicts with ... of the same name",
[c]="definition of type A conflicts with ... of the same name",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="definition of type %0 conflicts with %select{typedef|type alias}1 of the same name",
[g]="definition of type %0 conflicts with %select{typedef|type alias}1 of the same name",
[g]=n,
[i]=l,
[h]="definition of type (.*?) conflicts with (?:typedef|type alias) of the same name",
[j]="definition of type (.*?) conflicts with (?:typedef|type alias) of the same name",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,17451,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n        Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}},
[k]={{u,17451,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n        Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}},
[o]={
[o]={
Line 5,025: Line 5,044:
},
},
["err_tag_index_out_of_range"]={
["err_tag_index_out_of_range"]={
[i]="... index A is greater than the number of arguments specified",
[c]="... index A is greater than the number of arguments specified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{type tag|argument}0 index %1 is greater than the number of arguments specified",
[g]="%select{type tag|argument}0 index %1 is greater than the number of arguments specified",
[g]=n,
[i]=l,
[h]="(?:type tag|argument) index (.*?) is greater than the number of arguments specified",
[j]="(?:type tag|argument) index (.*?) is greater than the number of arguments specified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a..."},
[e]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a...","Perform a bounds check on a function\'s argument list before accessing any index value specified by an \'argument_with_type_tag\' attribute. Fixes PR28520."},
[k]={{w,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (TypeTagIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{w,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (ArgumentIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}},
[k]={{w,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (TypeTagIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{w,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (ArgumentIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}},
[o]={
[o]={
Line 5,040: Line 5,059:
},
},
["err_tag_reference_conflict"]={
["err_tag_reference_conflict"]={
[i]="implicit declaration introduced by elaborated type conflicts with a ... of the same name",
[c]="implicit declaration introduced by elaborated type conflicts with a ... of the same name",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="implicit declaration introduced by elaborated type conflicts with a %select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}0 of the same name",
[g]="implicit declaration introduced by elaborated type conflicts with a %select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}0 of the same name",
[g]=n,
[i]=l,
[h]="implicit declaration introduced by elaborated type conflicts with a (?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) of the same name",
[j]="implicit declaration introduced by elaborated type conflicts with a (?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) of the same name",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[e]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[k]={{u,17442,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n        Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}},
[k]={{u,17442,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n        Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}},
[o]={
[o]={
Line 5,055: Line 5,074:
},
},
["err_tag_reference_non_tag"]={
["err_tag_reference_non_tag"]={
[i]="... A cannot be referenced with a ... specifier",
[c]="... A cannot be referenced with a ... specifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}1 %0 cannot be referenced with a %select{struct|interface|union|class|enum}2 specifier",
[g]="%select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}1 %0 cannot be referenced with a %select{struct|interface|union|class|enum}2 specifier",
[g]=n,
[i]=l,
[h]="(?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) (.*?) cannot be referenced with a (?:struct|interface|union|class|enum) specifier",
[j]="(?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) (.*?) cannot be referenced with a (?:struct|interface|union|class|enum) specifier",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[e]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[k]={{u,17429,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n        Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{r,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{r,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}},
[k]={{u,17429,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n        Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{s,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{s,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}},
[o]={
[o]={
["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"}
["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"}
Line 5,070: Line 5,089:
},
},
["err_tagless_friend_type_template"]={
["err_tagless_friend_type_template"]={
[i]="friend type templates must use an elaborated type",
[c]="friend type templates must use an elaborated type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="friend type templates must use an elaborated type",
[g]="friend type templates must use an elaborated type",
[g]=n,
[i]=l,
[h]="friend type templates must use an elaborated type",
[j]="friend type templates must use an elaborated type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates.  Angst about same."},
[e]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates.  Angst about same.","Improved representation and support for friend class templates.  Angst about same."},
[k]={{z,17444,"/// Handle a friend type declaration.  This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class.  So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n///  friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n///  template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n  // This is definitely an error in C++98.  It\'s probably meant to\n  // be forbidden in C++0x, too, but the specification is just\n  // poorly written.\n  //\n  // The problem is with declarations like the following:\n  //  template <T> friend A<T>::foo;\n  // where deciding whether a class C is a friend or not now hinges\n  // on whether there exists an instantiation of A that causes\n  // \'foo\' to equal C.  There are restrictions on class-heads\n  // (which we declare (by fiat) elaborated friend declarations to\n  // be) that makes this tractable.\n  //\n  // FIXME: handle \"template <> friend class A<T>;\", which\n  // is possibly well-formed?  Who even knows?\n  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n    Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}},
[k]={{A,17444,"/// Handle a friend type declaration.  This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class.  So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n///  friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n///  template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n  // This is definitely an error in C++98.  It\'s probably meant to\n  // be forbidden in C++0x, too, but the specification is just\n  // poorly written.\n  //\n  // The problem is with declarations like the following:\n  //  template <T> friend A<T>::foo;\n  // where deciding whether a class C is a friend or not now hinges\n  // on whether there exists an instantiation of A that causes\n  // \'foo\' to equal C.  There are restrictions on class-heads\n  // (which we declare (by fiat) elaborated friend declarations to\n  // be) that makes this tractable.\n  //\n  // FIXME: handle \"template <> friend class A<T>;\", which\n  // is possibly well-formed?  Who even knows?\n  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n    Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp:11:22: error: friend type templates must use an elaborated type"}
["clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp:11:22: error: friend type templates must use an elaborated type"}
Line 5,085: Line 5,104:
},
},
["err_target_clone_doesnt_match"]={
["err_target_clone_doesnt_match"]={
[i]="\'target_clones\' attribute does not match previous declaration",
[c]="\'target_clones\' attribute does not match previous declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'target_clones\' attribute does not match previous declaration",
[g]="\'target_clones\' attribute does not match previous declaration",
[g]=n,
[i]=l,
[h]="\'target_clones\' attribute does not match previous declaration",
[j]="\'target_clones\' attribute does not match previous declaration",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={Fb,1616787805,Gb},
[e]={Yb,1616787805,mb,mb},
[k]={{u,11477,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    case MultiVersionKind::TargetClones: {\n      if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n        S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}},
[k]={{u,11477,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    case MultiVersionKind::TargetClones: {\n      if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n        S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}},
[o]={
[o]={
Line 5,100: Line 5,119:
},
},
["err_target_clone_must_have_default"]={
["err_target_clone_must_have_default"]={
[i]="\'target_clones\' multiversioning requires a default target",
[c]="\'target_clones\' multiversioning requires a default target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'target_clones\' multiversioning requires a default target",
[g]="\'target_clones\' multiversioning requires a default target",
[g]=n,
[i]=l,
[h]="\'target_clones\' multiversioning requires a default target",
[j]="\'target_clones\' multiversioning requires a default target",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={Fb,1616787805,Gb},
[e]={Yb,1616787805,mb,mb},
[k]={{Q,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HasDefault) {\n    S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}},
[k]={{V,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HasDefault) {\n    S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}},
[o]={
[o]={
["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:4:21: error: \'target_clones\' multiversioning requires a default target"}
["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:4:21: error: \'target_clones\' multiversioning requires a default target"}
Line 5,115: Line 5,134:
},
},
["err_target_unknown_abi"]={
["err_target_unknown_abi"]={
[i]="unknown target ABI \'A\'",
[c]="unknown target ABI \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unknown target ABI \'%0\'",
[g]="unknown target ABI \'%0\'",
[g]=n,
[i]=l,
[h]="unknown target ABI \'(.*?)\'",
[j]="unknown target ABI \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[e]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets."},
[k]={{Eb,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target ABI if specified.\n  if (!Opts->ABI.empty() && !Target->setABI(Opts->ABI)) {\n    Diags.Report(diag::err_target_unknown_abi) << Opts->ABI;"}}
[k]={{Ub,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target ABI if specified.\n  if (!Opts->ABI.empty() && !Target->setABI(Opts->ABI)) {\n    Diags.Report(diag::err_target_unknown_abi) << Opts->ABI;"}}
},
},
["err_target_unknown_cpu"]={
["err_target_unknown_cpu"]={
[i]="unknown target CPU \'A\'",
[c]="unknown target CPU \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unknown target CPU \'%0\'",
[g]="unknown target CPU \'%0\'",
[g]=n,
[i]=l,
[h]="unknown target CPU \'(.*?)\'",
[j]="unknown target CPU \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."},
[e]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).","ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."},
[k]={{Eb,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{Eb,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}},
[k]={{Ub,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{Ub,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}},
[o]={
[o]={
["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"}
["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"}
Line 5,142: Line 5,161:
},
},
["err_target_unknown_fpmath"]={
["err_target_unknown_fpmath"]={
[i]="unknown FP unit \'A\'",
[c]="unknown FP unit \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unknown FP unit \'%0\'",
[g]="unknown FP unit \'%0\'",
[g]=n,
[i]=l,
[h]="unknown FP unit \'(.*?)\'",
[j]="unknown FP unit \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[e]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86."},
[k]={{Eb,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the fp math unit.\n  if (!Opts->FPMath.empty() && !Target->setFPMath(Opts->FPMath)) {\n    Diags.Report(diag::err_target_unknown_fpmath) << Opts->FPMath;"}}
[k]={{Ub,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the fp math unit.\n  if (!Opts->FPMath.empty() && !Target->setFPMath(Opts->FPMath)) {\n    Diags.Report(diag::err_target_unknown_fpmath) << Opts->FPMath;"}}
},
},
["err_target_unknown_triple"]={
["err_target_unknown_triple"]={
[i]="unknown target triple \'A\'",
[c]="unknown target triple \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unknown target triple \'%0\'",
[g]="unknown target triple \'%0\'",
[g]=n,
[i]=l,
[h]="unknown target triple \'(.*?)\'",
[j]="unknown target triple \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[e]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets."},
[k]={{Eb,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  if (!Target) {\n    Diags.Report(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/CrossWindows.cpp",98,"void tools::CrossWindows::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/lib/Driver/ToolChains/Gnu.cpp",453,"void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n  } else {\n    D.Diag(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/MinGW.cpp",139,"void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/tools/driver/cc1as_main.cpp",390,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  if (!TheTarget)\n    return Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/tools/driver/cc1as_main.cpp",574,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  if (!TAP)\n    Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/unittests/Basic/DiagnosticTest.cpp",42,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}}
[k]={{Ub,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  if (!Target) {\n    Diags.Report(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/CrossWindows.cpp",98,"void tools::CrossWindows::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/lib/Driver/ToolChains/Gnu.cpp",453,"void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n  } else {\n    D.Diag(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/MinGW.cpp",139,"void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/tools/driver/cc1as_main.cpp",390,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  if (!TheTarget)\n    return Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/tools/driver/cc1as_main.cpp",574,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  if (!TAP)\n    Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/unittests/Basic/DiagnosticTest.cpp",42,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}}
},
},
["err_target_unsupported_abi"]={
["err_target_unsupported_abi"]={
[i]="ABI \'A\' is not supported on CPU \'B\'",
[c]="ABI \'A\' is not supported on CPU \'B\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ABI \'%0\' is not supported on CPU \'%1\'",
[g]="ABI \'%0\' is not supported on CPU \'%1\'",
[g]=n,
[i]=l,
[h]="ABI \'(.*?)\' is not supported on CPU \'(.*?)\'",
[j]="ABI \'(.*?)\' is not supported on CPU \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."},
[e]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."},
[k]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // 64-bit ABI\'s require 64-bit CPU\'s.\n  if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}}
[k]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // 64-bit ABI\'s require 64-bit CPU\'s.\n  if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}}
},
},
["err_target_unsupported_abi_for_triple"]={
["err_target_unsupported_abi_for_triple"]={
[i]="ABI \'A\' is not supported for \'B\'",
[c]="ABI \'A\' is not supported for \'B\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ABI \'%0\' is not supported for \'%1\'",
[g]="ABI \'%0\' is not supported for \'%1\'",
[g]=n,
[i]=l,
[h]="ABI \'(.*?)\' is not supported for \'(.*?)\'",
[j]="ABI \'(.*?)\' is not supported for \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."}
[e]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."}
},
},
["err_target_unsupported_arch"]={
["err_target_unsupported_arch"]={
[i]="the target architecture \'A\' is not supported by the target \'B\'",
[c]="the target architecture \'A\' is not supported by the target \'B\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the target architecture \'%0\' is not supported by the target \'%1\'",
[g]="the target architecture \'%0\' is not supported by the target \'%1\'",
[g]=n,
[i]=l,
[h]="the target architecture \'(.*?)\' is not supported by the target \'(.*?)\'",
[j]="the target architecture \'(.*?)\' is not supported by the target \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM"},
[e]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM","Driver: add target definition for Windows on ARM"},
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n    if (Failure || Version < 7)\n      D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  default:\n    D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Arch == llvm::Triple::x86)\n  else if (Arch == llvm::Triple::arm)\n  else if (Arch == llvm::Triple::x86_64)\n  else if (Arch == llvm::Triple::mipsel)\n  else\n    D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}}
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n    if (Failure || Version < 7)\n      D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  default:\n    D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Arch == llvm::Triple::x86)\n  else if (Arch == llvm::Triple::arm)\n  else if (Arch == llvm::Triple::x86_64)\n  else if (Arch == llvm::Triple::mipsel)\n  else\n    D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}}
},
},
["err_target_unsupported_cpu_for_micromips"]={
["err_target_unsupported_cpu_for_micromips"]={
[i]="micromips is not supported for target CPU \'A\'",
[c]="micromips is not supported for target CPU \'A\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="micromips is not supported for target CPU \'%0\'",
[g]="micromips is not supported for target CPU \'%0\'",
[g]=n,
[i]=l,
[h]="micromips is not supported for target CPU \'(.*?)\'",
[j]="micromips is not supported for target CPU \'(.*?)\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"},
[e]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6","[mips] Removal of microMIPS64R6"},
[k]={{"clang/lib/Basic/Targets/Mips.cpp",239,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // microMIPS64R6 backend was removed.\n  if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}}
[k]={{"clang/lib/Basic/Targets/Mips.cpp",239,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // microMIPS64R6 backend was removed.\n  if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}}
},
},
["err_target_unsupported_execute_only"]={
["err_target_unsupported_execute_only"]={
[i]="execute only is not supported for the A sub-architecture",
[c]="execute only is not supported for the A sub-architecture",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="execute only is not supported for the %0 sub-architecture",
[g]="execute only is not supported for the %0 sub-architecture",
[g]=n,
[i]=l,
[h]="execute only is not supported for the (.*?) sub\\-architecture",
[j]="execute only is not supported for the (.*?) sub\\-architecture",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen"},
[e]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen","[ARM] Implement execute-only support in CodeGen"},
[k]={{Ib,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n          D.Diag(diag::err_target_unsupported_execute_only) << Triple.getArchName();"}}
[k]={{Zb,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n          D.Diag(diag::err_target_unsupported_execute_only) << Triple.getArchName();"}}
},
},
["err_target_unsupported_fpmath"]={
["err_target_unsupported_fpmath"]={
[i]="the \'A\' unit is not supported with this instruction set",
[c]="the \'A\' unit is not supported with this instruction set",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the \'%0\' unit is not supported with this instruction set",
[g]="the \'%0\' unit is not supported with this instruction set",
[g]=n,
[i]=l,
[h]="the \'(.*?)\' unit is not supported with this instruction set",
[j]="the \'(.*?)\' unit is not supported with this instruction set",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[e]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86."},
[k]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n  // matches the selected sse level.\n  if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}}
[k]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n  // matches the selected sse level.\n  if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}}
},
},
["err_target_unsupported_mcmse"]={
["err_target_unsupported_mcmse"]={
[i]="-mcmse is not supported for A",
[c]="-mcmse is not supported for A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="-mcmse is not supported for %0",
[g]="-mcmse is not supported for %0",
[g]=n,
[i]=l,
[h]="\\-mcmse is not supported for (.*?)",
[j]="\\-mcmse is not supported for (.*?)",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro"},
[e]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro","[ARM][CMSE] Add commandline option and feature macro"},
[k]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // This does not diagnose illegal cases like having both\n  // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n  for (const auto &Feature : Features) {\n    if (Feature == \"+soft-float\") {\n    } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n    } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n    } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n    } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n    } else if (Feature == \"+neon\") {\n    } else if (Feature == \"+hwdiv\") {\n    } else if (Feature == \"+hwdiv-arm\") {\n    } else if (Feature == \"+crc\") {\n    } else if (Feature == \"+crypto\") {\n    } else if (Feature == \"+sha2\") {\n    } else if (Feature == \"+aes\") {\n    } else if (Feature == \"+dsp\") {\n    } else if (Feature == \"+fp64\") {\n    } else if (Feature == \"+8msecext\") {\n      if (CPUProfile != \"M\" || ArchVersion != 8) {\n        Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}}
[k]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // This does not diagnose illegal cases like having both\n  // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n  for (const auto &Feature : Features) {\n    if (Feature == \"+soft-float\") {\n    } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n    } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n    } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n    } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n    } else if (Feature == \"+neon\") {\n    } else if (Feature == \"+hwdiv\") {\n    } else if (Feature == \"+hwdiv-arm\") {\n    } else if (Feature == \"+crc\") {\n    } else if (Feature == \"+crypto\") {\n    } else if (Feature == \"+sha2\") {\n    } else if (Feature == \"+aes\") {\n    } else if (Feature == \"+dsp\") {\n    } else if (Feature == \"+fp64\") {\n    } else if (Feature == \"+8msecext\") {\n      if (CPUProfile != \"M\" || ArchVersion != 8) {\n        Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}}
},
},
["err_target_unsupported_tp_hard"]={
["err_target_unsupported_tp_hard"]={
[i]="hardware TLS register is not supported for the A sub-architecture",
[c]="hardware TLS register is not supported for the A sub-architecture",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="hardware TLS register is not supported for the %0 sub-architecture",
[g]="hardware TLS register is not supported for the %0 sub-architecture",
[g]=n,
[i]=l,
[h]="hardware TLS register is not supported for the (.*?) sub\\-architecture",
[j]="hardware TLS register is not supported for the (.*?) sub\\-architecture",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[e]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for"},
[k]={{Ib,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    if ((ThreadPointer == ReadTPMode::TPIDRURW || ThreadPointer == ReadTPMode::TPIDRURO || ThreadPointer == ReadTPMode::TPIDRPRW) && !isHardTPSupported(Triple) && !ForAS) {\n      D.Diag(diag::err_target_unsupported_tp_hard) << Triple.getArchName();"},{"clang/lib/Driver/ToolChains/Clang.cpp",3397,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n      // Check whether the target subarch supports the hardware TLS register\n      if (!arm::isHardTPSupported(EffectiveTriple)) {\n        D.Diag(diag::err_target_unsupported_tp_hard) << EffectiveTriple.getArchName();"}}
[k]={{Zb,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    if ((ThreadPointer == ReadTPMode::TPIDRURW || ThreadPointer == ReadTPMode::TPIDRURO || ThreadPointer == ReadTPMode::TPIDRPRW) && !isHardTPSupported(Triple) && !ForAS) {\n      D.Diag(diag::err_target_unsupported_tp_hard) << Triple.getArchName();"},{"clang/lib/Driver/ToolChains/Clang.cpp",3397,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n      // Check whether the target subarch supports the hardware TLS register\n      if (!arm::isHardTPSupported(EffectiveTriple)) {\n        D.Diag(diag::err_target_unsupported_tp_hard) << EffectiveTriple.getArchName();"}}
},
},
["err_target_unsupported_type"]={
["err_target_unsupported_type"]={
[i]="A requires ... B ...type support, but target \'C\' does not support it",
[c]="A requires ... B ...type support, but target \'C\' does not support it",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support, but target \'%5\' does not support it",
[g]="%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support, but target \'%5\' does not support it",
[g]=n,
[i]=l,
[h]="(.*?) requires (?:|(.*?) bit size) (.*?) (?:|return )type support, but target \'(.*?)\' does not support it",
[j]="(.*?) requires (?:|(.*?) bit size) (.*?) (?:|return )type support, but target \'(.*?)\' does not support it",
[b]=a,
[b]=a,
[j]="OpenMP Issue",
[h]="OpenMP Issue",
[c]={yb,1615397021,zb},
[e]={ac,1615397021,hb,hb},
[k]={{mb,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if (Ty->isBitIntType()) {\n      if (!Context.getTargetInfo().hasBitIntType()) {\n        PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{mb,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{mb,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{mb,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{w,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n      return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}},
[k]={{yb,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if (Ty->isBitIntType()) {\n      if (!Context.getTargetInfo().hasBitIntType()) {\n        PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{w,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n      return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}},
[o]={
[o]={
["clang/test/SemaCUDA/spirv-int128.cu"]={"clang/test/SemaCUDA/spirv-int128.cu:15:10: error: \'d_glb\' requires 128 bit size \'__int128\' type support, but target \'spirv64\' does not support it"}
["clang/test/SemaCUDA/spirv-int128.cu"]={"clang/test/SemaCUDA/spirv-int128.cu:15:10: error: \'d_glb\' requires 128 bit size \'__int128\' type support, but target \'spirv64\' does not support it"}
Line 5,276: Line 5,295:
},
},
["err_target_unsupported_unaligned"]={
["err_target_unsupported_unaligned"]={
[i]="the A sub-architecture does not support unaligned accesses",
[c]="the A sub-architecture does not support unaligned accesses",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="the %0 sub-architecture does not support unaligned accesses",
[g]="the %0 sub-architecture does not support unaligned accesses",
[g]=n,
[i]=l,
[h]="the (.*?) sub\\-architecture does not support unaligned accesses",
[j]="the (.*?) sub\\-architecture does not support unaligned accesses",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets"},
[e]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets","Emit diagnostic for -munaligned-access on v6m targets"},
[k]={{Ib,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{Ib,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n      // v8M Baseline follows on from v6M, so doesn\'t support unaligned memory\n      // access either.\n      else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v8m.base\";"}}
[k]={{Zb,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{Zb,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n      // v8M Baseline follows on from v6M, so doesn\'t support unaligned memory\n      // access either.\n      else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v8m.base\";"}}
},
},
["err_tcb_conflicting_attributes"]={
["err_tcb_conflicting_attributes"]={
[i]="attributes \'A(\"B\")\' and \'C(\"D\")\' are mutually exclusive",
[c]="attributes \'A(\"B\")\' and \'C(\"D\")\' are mutually exclusive",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="attributes \'%0(\"%2\")\' and \'%1(\"%2\")\' are mutually exclusive",
[g]="attributes \'%0(\"%2\")\' and \'%1(\"%2\")\' are mutually exclusive",
[g]=n,
[i]=l,
[h]="attributes \'(.*?)\\(\"(.*?)\"\\)\' and \'(.*?)\\(\"(.*?)\"\\)\' are mutually exclusive",
[j]="attributes \'(.*?)\\(\"(.*?)\"\\)\' and \'(.*?)\\(\"(.*?)\"\\)\' are mutually exclusive",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={bb,1590001902,ab},
[e]={db,1590001902,N,N},
[k]={{Q,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // A function cannot be have both regular and leaf membership in the same TCB.\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n    S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{Q,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n    S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}},
[k]={{V,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // A function cannot be have both regular and leaf membership in the same TCB.\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n    S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{V,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n    S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}},
[o]={
[o]={
["clang/test/Sema/attr-enforce-tcb-errors.cpp"]={"clang/test/Sema/attr-enforce-tcb-errors.cpp:21:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:28:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:36:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:43:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:75:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive"}
["clang/test/Sema/attr-enforce-tcb-errors.cpp"]={"clang/test/Sema/attr-enforce-tcb-errors.cpp:21:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:28:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:36:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:43:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:75:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive"}
Line 5,303: Line 5,322:
},
},
["err_temp_copy_ambiguous"]={
["err_temp_copy_ambiguous"]={
[i]="ambiguous constructor call when ... of type A",
[c]="ambiguous constructor call when ... of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ambiguous constructor call when %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1",
[g]="ambiguous constructor call when %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1",
[g]=n,
[i]=l,
[h]="ambiguous constructor call when (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
[j]="ambiguous constructor call when (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[e]={"e1314a64b803",1261112541,Bb,Bb},
[k]={{E,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AmbiguousCandidates, CurInitExpr);"}}
[k]={{M,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AmbiguousCandidates, CurInitExpr);"}}
},
},
["err_temp_copy_deleted"]={
["err_temp_copy_deleted"]={
[i]="... of type A invokes deleted constructor",
[c]="... of type A invokes deleted constructor",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor",
[g]="%select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor",
[g]=n,
[i]=l,
[h]="(?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?) invokes deleted constructor",
[j]="(?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?) invokes deleted constructor",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[e]={"e1314a64b803",1261112541,Bb,Bb},
[k]={{E,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_Deleted:\n    S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}},
[k]={{M,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_Deleted:\n    S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:55:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:60:13: error: copying variable of type \'Derived\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:143:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:146:13: error: copying variable of type \'Derived\' invokes deleted constructor"}
["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:55:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:60:13: error: copying variable of type \'Derived\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:143:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:146:13: error: copying variable of type \'Derived\' invokes deleted constructor"}
Line 5,330: Line 5,349:
},
},
["err_temp_copy_incomplete"]={
["err_temp_copy_incomplete"]={
[i]="copying a temporary object of incomplete type A",
[c]="copying a temporary object of incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="copying a temporary object of incomplete type %0",
[g]="copying a temporary object of incomplete type %0",
[g]=n,
[i]=l,
[h]="copying a temporary object of incomplete type (.*?)",
[j]="copying a temporary object of incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure"},
[e]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure","When we attempt to create a temporary object of class type, be sure"},
[k]={{E,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}}
[k]={{M,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}}
},
},
["err_temp_copy_no_viable"]={
["err_temp_copy_no_viable"]={
[i]="no viable constructor ... of type A",
[c]="no viable constructor ... of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no viable constructor %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1",
[g]="no viable constructor %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1",
[g]=n,
[i]=l,
[h]="no viable constructor (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
[j]="no viable constructor (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[e]={"e1314a64b803",1261112541,Bb,Bb},
[k]={{E,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}},
[k]={{M,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}},
[o]={
[o]={
["clang/test/SemaCXX/copy-initialization.cpp"]={"clang/test/SemaCXX/copy-initialization.cpp:44:7: error: no viable constructor copying parameter of type \'const Foo\'"}
["clang/test/SemaCXX/copy-initialization.cpp"]={"clang/test/SemaCXX/copy-initialization.cpp:44:7: error: no viable constructor copying parameter of type \'const Foo\'"}
Line 5,357: Line 5,376:
},
},
["err_template_arg_address_of_non_pointer"]={
["err_template_arg_address_of_non_pointer"]={
[i]="address taken in non-type template argument for template parameter of reference type A",
[c]="address taken in non-type template argument for template parameter of reference type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="address taken in non-type template argument for template parameter of reference type %0",
[g]="address taken in non-type template argument for template parameter of reference type %0",
[g]=n,
[i]=l,
[h]="address taken in non\\-type template argument for template parameter of reference type (.*?)",
[j]="address taken in non\\-type template argument for template parameter of reference type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[e]={"b242683d9992",1270146755,Ib,Ib},
[k]={{r,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{r,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}},
[k]={{s,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{s,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:116:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:118:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:129:9: error: address taken in non-type template argument for template parameter of reference type \'const int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:136:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:138:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:140:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:146:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'"}
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:116:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:118:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:129:9: error: address taken in non-type template argument for template parameter of reference type \'const int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:136:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:138:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:140:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:146:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'"}
Line 5,372: Line 5,391:
},
},
["err_template_arg_deduced_incomplete_pack"]={
["err_template_arg_deduced_incomplete_pack"]={
[i]="deduced incomplete pack A for template parameter B",
[c]="deduced incomplete pack A for template parameter B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="deduced incomplete pack %0 for template parameter %1",
[g]="deduced incomplete pack %0 for template parameter %1",
[g]=n,
[i]=l,
[h]="deduced incomplete pack (.*?) for template parameter (.*?)",
[j]="deduced incomplete pack (.*?) for template parameter (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context."},
[e]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context.","Fix template argument deduction when only some of a parameter pack is a non-deduced context."},
[k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n  if (Arg.getKind() == TemplateArgument::Pack) {\n    for (const auto &P : Arg.pack_elements()) {\n      if (P.isNull()) {\n        S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}}
[k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n  if (Arg.getKind() == TemplateArgument::Pack) {\n    for (const auto &P : Arg.pack_elements()) {\n      if (P.isNull()) {\n        S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}}
},
},
["err_template_arg_field"]={
["err_template_arg_field"]={
[i]="non-type template argument refers to non-static data member A",
[c]="non-type template argument refers to non-static data member A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument refers to non-static data member %0",
[g]="non-type template argument refers to non-static data member %0",
[g]=n,
[i]=l,
[h]="non\\-type template argument refers to non\\-static data member (.*?)",
[j]="non\\-type template argument refers to non\\-static data member (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}},
[k]={{s,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:169:9: error: non-type template argument refers to non-static data member \'NonStaticMember\'"}
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:169:9: error: non-type template argument refers to non-static data member \'NonStaticMember\'"}
Line 5,399: Line 5,418:
},
},
["err_template_arg_invalid"]={
["err_template_arg_invalid"]={
[i]="non-type template argument \'A\' is invalid",
[c]="non-type template argument \'A\' is invalid",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument \'%0\' is invalid",
[g]="non-type template argument \'%0\' is invalid",
[g]=n,
[i]=l,
[h]="non\\-type template argument \'(.*?)\' is invalid",
[j]="non\\-type template argument \'(.*?)\' is invalid",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{r,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}},
[k]={{s,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}},
[o]={
[o]={
[pb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31:4: error: non-type template argument \'(int *)1\' is invalid"}
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31:4: error: non-type template argument \'(int *)1\' is invalid"}
}
}
},
},
["err_template_arg_list_constraints_not_satisfied"]={
["err_template_arg_list_constraints_not_satisfied"]={
[i]="constraints not satisfied for ... AB",
[c]="constraints not satisfied for ... AB",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="constraints not satisfied for %select{class template|function template|variable template|alias template|template template parameter|template}0 %1%2",
[g]="constraints not satisfied for %select{class template|function template|variable template|alias template|template template parameter|template}0 %1%2",
[g]=n,
[i]=l,
[h]="constraints not satisfied for (?:class template|function template|variable template|alias template|template template parameter|template) (.*?)(.*?)",
[j]="constraints not satisfied for (?:class template|function template|variable template|alias template|template template parameter|template) (.*?)(.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[e]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute","[clang] Add no_builtin attribute"},
[k]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n  if (!Satisfaction.IsSatisfied) {\n    Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}},
[k]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n  if (!Satisfaction.IsSatisfied) {\n    Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}},
[o]={
[o]={
Line 5,429: Line 5,448:
},
},
["err_template_arg_list_different_arity"]={
["err_template_arg_list_different_arity"]={
[i]="... template arguments for ... A",
[c]="... template arguments for ... A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{too few|too many}0 template arguments for %select{class template|function template|variable template|alias template|template template parameter|concept|template}1 %2",
[g]="%select{too few|too many}0 template arguments for %select{class template|function template|variable template|alias template|template template parameter|concept|template}1 %2",
[g]=n,
[i]=l,
[h]="(?:too few|too many) template arguments for (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?)",
[j]="(?:too few|too many) template arguments for (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{r,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{r,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}},
[k]={{s,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{s,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{s,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:28: error: too few template arguments for class template \'A\'"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:28: error: too few template arguments for class template \'A\'"}
Line 5,444: Line 5,463:
},
},
["err_template_arg_member_ptr_base_derived_not_supported"]={
["err_template_arg_member_ptr_base_derived_not_supported"]={
[i]="sorry, non-type template argument of pointer-to-member type A that refers to member B of a different class is not supported yet",
[c]="sorry, non-type template argument of pointer-to-member type A that refers to member B of a different class is not supported yet",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="sorry, non-type template argument of pointer-to-member type %1 that refers to member %q0 of a different class is not supported yet",
[g]="sorry, non-type template argument of pointer-to-member type %1 that refers to member %q0 of a different class is not supported yet",
[g]=n,
[i]=l,
[h]="sorry, non\\-type template argument of pointer\\-to\\-member type (.*?) that refers to member (.*?) of a different class is not supported yet",
[j]="sorry, non\\-type template argument of pointer\\-to\\-member type (.*?) that refers to member (.*?) of a different class is not supported yet",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[k]={{r,7325,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17) {\n    case APValue::MemberPointer: {\n      // FIXME: We need TemplateArgument representation and mangling for these.\n      if (!Value.getMemberPointerPath().empty()) {\n        Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}},
[k]={{s,7325,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17) {\n    case APValue::MemberPointer: {\n      // FIXME: We need TemplateArgument representation and mangling for these.\n      if (!Value.getMemberPointerPath().empty()) {\n        Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:100:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:101:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:105:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:109:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:110:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:114:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:208:34: error: sorry, non-type template argument of pointer-to-member type \'int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:210:34: error: sorry, non-type template argument of pointer-to-member type \'const int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet"}
["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:100:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:101:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:105:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:109:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:110:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:114:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:208:34: error: sorry, non-type template argument of pointer-to-member type \'int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:210:34: error: sorry, non-type template argument of pointer-to-member type \'const int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet"}
Line 5,459: Line 5,478:
},
},
["err_template_arg_method"]={
["err_template_arg_method"]={
[i]="non-type template argument refers to non-static member function A",
[c]="non-type template argument refers to non-static member function A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument refers to non-static member function %0",
[g]="non-type template argument refers to non-static member function %0",
[g]=n,
[i]=l,
[h]="non\\-type template argument refers to non\\-static member function (.*?)",
[j]="non\\-type template argument refers to non\\-static member function (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_method) << Method << Arg->getSourceRange();"}}
[k]={{s,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_method) << Method << Arg->getSourceRange();"}}
},
},
["err_template_arg_must_be_expr"]={
["err_template_arg_must_be_expr"]={
[i]="template argument for non-type template parameter must be an expression",
[c]="template argument for non-type template parameter must be an expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument for non-type template parameter must be an expression",
[g]="template argument for non-type template parameter must be an expression",
[g]=n,
[i]=l,
[h]="template argument for non\\-type template parameter must be an expression",
[j]="template argument for non\\-type template parameter must be an expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{r,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      if (T->isFunctionType())\n      else\n        Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}},
[k]={{s,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{s,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      if (T->isFunctionType())\n      else\n        Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}},
[o]={
[o]={
["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:7:11: error: template argument for non-type template parameter must be an expression"}
["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:7:11: error: template argument for non-type template parameter must be an expression"}
Line 5,486: Line 5,505:
},
},
["err_template_arg_must_be_template"]={
["err_template_arg_must_be_template"]={
[i]="template argument for template template parameter must be a class template...",
[c]="template argument for template template parameter must be a class template...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument for template template parameter must be a class template%select{| or type alias template}0",
[g]="template argument for template template parameter must be a class template%select{| or type alias template}0",
[g]=n,
[i]=l,
[h]="template argument for template template parameter must be a class template(?:| or type alias template)",
[j]="template argument for template template parameter must be a class template(?:| or type alias template)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  case TemplateArgument::Type:\n    Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}},
[k]={{s,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  case TemplateArgument::Type:\n    Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}},
[o]={
[o]={
["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:49:20: error: template argument for template template parameter must be a class template or type alias template"}
["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:49:20: error: template argument for template template parameter must be a class template or type alias template"}
Line 5,501: Line 5,520:
},
},
["err_template_arg_must_be_type"]={
["err_template_arg_must_be_type"]={
[i]="template argument for template type parameter must be a type",
[c]="template argument for template type parameter must be a type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument for template type parameter must be a type",
[g]="template argument for template type parameter must be a type",
[g]=n,
[i]=l,
[h]="template argument for template type parameter must be a type",
[j]="template argument for template type parameter must be a type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}},
[k]={{s,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}},
[o]={
[o]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:41:4: error: template argument for template type parameter must be a type"}
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:41:4: error: template argument for template type parameter must be a type"}
Line 5,516: Line 5,535:
},
},
["err_template_arg_must_be_type_suggest"]={
["err_template_arg_must_be_type_suggest"]={
[i]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[c]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[g]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[g]=n,
[i]=l,
[h]="template argument for template type parameter must be a type; did you forget \'typename\'\\?",
[j]="template argument for template type parameter must be a type; did you forget \'typename\'\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler"},
[e]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler","Suggest adding \'typename\' when it would make the compiler"},
[k]={{r,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}},
[k]={{s,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}},
[o]={
[o]={
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:192:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:165:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:185:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:210:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:217:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?"}
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:192:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:165:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:185:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:210:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:217:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?"}
Line 5,531: Line 5,550:
},
},
["err_template_arg_no_ref_bind"]={
["err_template_arg_no_ref_bind"]={
[i]="non-type template parameter of reference type A cannot bind to template argument of type B",
[c]="non-type template parameter of reference type A cannot bind to template argument of type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template parameter of reference type %diff{$ cannot bind to template argument of type $|cannot bind to template of incompatible argument type}0,1",
[g]="non-type template parameter of reference type %diff{$ cannot bind to template argument of type $|cannot bind to template of incompatible argument type}0,1",
[g]=n,
[i]=l,
[h]="non\\-type template parameter of reference type (?:(.*?) cannot bind to template argument of type (.*?)|cannot bind to template of incompatible argument type)",
[j]="non\\-type template parameter of reference type (?:(.*?) cannot bind to template argument of type (.*?)|cannot bind to template of incompatible argument type)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}},
[k]={{s,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp:237:43: error: non-type template parameter of reference type \'float &\' cannot bind to template argument of type \'int\'"}
["clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp:237:43: error: non-type template parameter of reference type \'float &\' cannot bind to template argument of type \'int\'"}
Line 5,546: Line 5,565:
},
},
["err_template_arg_nontype_ambig"]={
["err_template_arg_nontype_ambig"]={
[i]="template argument for non-type template parameter is treated as function type A",
[c]="template argument for non-type template parameter is treated as function type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument for non-type template parameter is treated as function type %0",
[g]="template argument for non-type template parameter is treated as function type %0",
[g]=n,
[i]=l,
[h]="template argument for non\\-type template parameter is treated as function type (.*?)",
[j]="template argument for non\\-type template parameter is treated as function type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      if (T->isFunctionType())\n        Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}},
[k]={{s,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      if (T->isFunctionType())\n        Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}},
[o]={
[o]={
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:6:3: error: template argument for non-type template parameter is treated as function type \'int ()\'"}
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:6:3: error: template argument for non-type template parameter is treated as function type \'int ()\'"}
Line 5,561: Line 5,580:
},
},
["err_template_arg_not_address_constant"]={
["err_template_arg_not_address_constant"]={
[i]="non-type template argument of type A is not a constant expression",
[c]="non-type template argument of type A is not a constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument of type %0 is not a constant expression",
[g]="non-type template argument of type %0 is not a constant expression",
[g]=n,
[i]=l,
[h]="non\\-type template argument of type (.*?) is not a constant expression",
[j]="non\\-type template argument of type (.*?) is not a constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[e]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on"},
[k]={{r,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}},
[k]={{s,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}},
[o]={
[o]={
[pb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: error: non-type template argument of type \'std::nullptr_t\' is not a constant expression","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:30:4: error: non-type template argument of type \'int *\' is not a constant expression"}
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: error: non-type template argument of type \'std::nullptr_t\' is not a constant expression","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:30:4: error: non-type template argument of type \'int *\' is not a constant expression"}
}
}
},
},
["err_template_arg_not_address_of"]={
["err_template_arg_not_address_of"]={
[i]="non-type template argument for template parameter of pointer type A must have its address taken",
[c]="non-type template argument for template parameter of pointer type A must have its address taken",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument for template parameter of pointer type %0 must have its address taken",
[g]="non-type template argument for template parameter of pointer type %0 must have its address taken",
[g]=n,
[i]=l,
[h]="non\\-type template argument for template parameter of pointer type (.*?) must have its address taken",
[j]="non\\-type template argument for template parameter of pointer type (.*?) must have its address taken",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[e]={"b242683d9992",1270146755,Ib,Ib},
[k]={{r,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{r,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}},
[k]={{s,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{s,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}},
[o]={
[o]={
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:148:25: error: non-type template argument for template parameter of pointer type \'const GUID *\' (aka \'const _GUID *\') must have its address taken"}
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:148:25: error: non-type template argument for template parameter of pointer type \'const GUID *\' (aka \'const _GUID *\') must have its address taken"}
Line 5,591: Line 5,610:
},
},
["err_template_arg_not_convertible"]={
["err_template_arg_not_convertible"]={
[i]="non-type template argument of type A cannot be converted to a value of type B",
[c]="non-type template argument of type A cannot be converted to a value of type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument of type %0 cannot be converted to a value of type %1",
[g]="non-type template argument of type %0 cannot be converted to a value of type %1",
[g]=n,
[i]=l,
[h]="non\\-type template argument of type (.*?) cannot be converted to a value of type (.*?)",
[j]="non\\-type template argument of type (.*?) cannot be converted to a value of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n      else\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{r,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{r,7521,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{r,7704,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}},
[k]={{s,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n      else\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{s,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{s,7521,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{s,7704,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}},
[o]={
[o]={
[pb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:68:4: error: non-type template argument of type \'const int\' cannot be converted to a value of type \'std::nullptr_t\'"}
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:68:4: error: non-type template argument of type \'const int\' cannot be converted to a value of type \'std::nullptr_t\'"}
}
}
},
},
["err_template_arg_not_decl_ref"]={
["err_template_arg_not_decl_ref"]={
[i]="non-type template argument does not refer to any declaration",
[c]="non-type template argument does not refer to any declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument does not refer to any declaration",
[g]="non-type template argument does not refer to any declaration",
[g]=n,
[i]=l,
[h]="non\\-type template argument does not refer to any declaration",
[j]="non\\-type template argument does not refer to any declaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template"},
[e]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template","Fix PR6159 and several other problems with value-dependent non-type template"},
[k]={{r,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.getLangOpts().MicrosoftExt) {\n    if (FirstOpLoc.isValid()) {\n      if (FirstOpKind == UO_AddrOf)\n      else if (Arg->getType()->isPointerType()) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{r,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{r,7354,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17) {\n    case APValue::LValue: {\n      if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n        Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}},
[k]={{s,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.getLangOpts().MicrosoftExt) {\n    if (FirstOpLoc.isValid()) {\n      if (FirstOpKind == UO_AddrOf)\n      else if (Arg->getType()->isPointerType()) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{s,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{s,7354,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17) {\n    case APValue::LValue: {\n      if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n        Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaTemplate/temp_arg_template.cpp"]={"clang/test/SemaTemplate/temp_arg_template.cpp:107:21: error: non-type template argument does not refer to any declaration"}
["clang/test/SemaTemplate/temp_arg_template.cpp"]={"clang/test/SemaTemplate/temp_arg_template.cpp:107:21: error: non-type template argument does not refer to any declaration"}
Line 5,621: Line 5,640:
},
},
["err_template_arg_not_ice"]={
["err_template_arg_not_ice"]={
[i]="non-type template argument of type A is not an integral constant expression",
[c]="non-type template argument of type A is not an integral constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument of type %0 is not an integral constant expression",
[g]="non-type template argument of type %0 is not an integral constant expression",
[g]=n,
[i]=l,
[h]="non\\-type template argument of type (.*?) is not an integral constant expression",
[j]="non\\-type template argument of type (.*?) is not an integral constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,7496,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n    } else if (!Arg->isValueDependent()) {\n      class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n        SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}},
[k]={{s,7496,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n    } else if (!Arg->isValueDependent()) {\n      class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n        SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}},
[o]={
[o]={
["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: error: non-type template argument of type \'int\' is not an integral constant expression"}
["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: error: non-type template argument of type \'int\' is not an integral constant expression"}
Line 5,636: Line 5,655:
},
},
["err_template_arg_not_integral_or_enumeral"]={
["err_template_arg_not_integral_or_enumeral"]={
[i]="non-type template argument of type A must have an integral or enumeration type",
[c]="non-type template argument of type A must have an integral or enumeration type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument of type %0 must have an integral or enumeration type",
[g]="non-type template argument of type %0 must have an integral or enumeration type",
[g]=n,
[i]=l,
[h]="non\\-type template argument of type (.*?) must have an integral or enumeration type",
[j]="non\\-type template argument of type (.*?) must have an integral or enumeration type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,7483,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}},
[k]={{s,7483,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:35:3: error: non-type template argument of type \'X\' must have an integral or enumeration type"}
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:35:3: error: non-type template argument of type \'X\' must have an integral or enumeration type"}
Line 5,651: Line 5,670:
},
},
["err_template_arg_not_object_or_func"]={
["err_template_arg_not_object_or_func"]={
[i]="non-type template argument does not refer to an object or function",
[c]="non-type template argument does not refer to an object or function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument does not refer to an object or function",
[g]="non-type template argument does not refer to an object or function",
[g]=n,
[i]=l,
[h]="non\\-type template argument does not refer to an object or function",
[j]="non\\-type template argument does not refer to an object or function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_object_or_func) << Arg->getSourceRange();"}}
[k]={{s,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_object_or_func) << Arg->getSourceRange();"}}
},
},
["err_template_arg_not_pointer_to_member_form"]={
["err_template_arg_not_pointer_to_member_form"]={
[i]="non-type template argument is not a pointer to member constant",
[c]="non-type template argument is not a pointer to member constant",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument is not a pointer to member constant",
[g]="non-type template argument is not a pointer to member constant",
[g]=n,
[i]=l,
[h]="non\\-type template argument is not a pointer to member constant",
[j]="non\\-type template argument is not a pointer to member constant",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!DRE)\n    return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{r,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}},
[k]={{s,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!DRE)\n    return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{s,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:73:5: error: non-type template argument is not a pointer to member constant"}
["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:73:5: error: non-type template argument is not a pointer to member constant"}
Line 5,678: Line 5,697:
},
},
["err_template_arg_not_valid_template"]={
["err_template_arg_not_valid_template"]={
[i]="template argument does not refer to a class or alias template, or template template parameter",
[c]="template argument does not refer to a class or alias template, or template template parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument does not refer to a class or alias template, or template template parameter",
[g]="template argument does not refer to a class or alias template, or template template parameter",
[g]=n,
[i]=l,
[h]="template argument does not refer to a class or alias template, or template template parameter",
[j]="template argument does not refer to a class or alias template, or template template parameter",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases."},
[e]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases.","[NFC] Tweak diagnostic for template template arguments, to include template aliases."},
[k]={{r,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (!Default.isInvalid()) {\n    if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n      Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{r,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++0x [temp.arg.template]p1:\n  //  A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //  id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}}
[k]={{s,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (!Default.isInvalid()) {\n    if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n      Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{s,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++0x [temp.arg.template]p1:\n  //  A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //  id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}}
},
},
["err_template_arg_object_no_linkage"]={
["err_template_arg_object_no_linkage"]={
[i]="non-type template argument refers to ... A that does not have linkage",
[c]="non-type template argument refers to ... A that does not have linkage",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument refers to %select{function|object}0 %1 that does not have linkage",
[g]="non-type template argument refers to %select{function|object}0 %1 that does not have linkage",
[g]=n,
[i]=l,
[h]="non\\-type template argument refers to (?:function|object) (.*?) that does not have linkage",
[j]="non\\-type template argument refers to (?:function|object) (.*?) that does not have linkage",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[e]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{r,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}},
[k]={{s,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:168:9: error: non-type template argument refers to function \'f\' that does not have linkage"}
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:168:9: error: non-type template argument refers to function \'f\' that does not have linkage"}
Line 5,705: Line 5,724:
},
},
["err_template_arg_overload_type"]={
["err_template_arg_overload_type"]={
[i]="template argument is the type of an unresolved overloaded function",
[c]="template argument is the type of an unresolved overloaded function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template argument is the type of an unresolved overloaded function",
[g]="template argument is the type of an unresolved overloaded function",
[g]=n,
[i]=l,
[h]="template argument is the type of an unresolved overloaded function",
[j]="template argument is the type of an unresolved overloaded function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the"},
[e]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the","When a template-id refers to a single function template, and the"},
[k]={{r,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n  if (CanonArg->isVariablyModifiedType()) {\n  } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {\n    return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;"}}
[k]={{s,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n  if (CanonArg->isVariablyModifiedType()) {\n  } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {\n    return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;"}}
},
},
["err_template_arg_ref_bind_ignores_quals"]={
["err_template_arg_ref_bind_ignores_quals"]={
[i]="reference binding of non-type template parameter of type A to template argument of type B ignores qualifiers",
[c]="reference binding of non-type template parameter of type A to template argument of type B ignores qualifiers",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers",
[g]="reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers",
[g]=n,
[i]=l,
[h]="reference binding of non\\-type template parameter (?:of type (.*?) to template argument of type (.*?)|to template argument) ignores qualifiers",
[j]="reference binding of non\\-type template parameter (?:of type (.*?) to template argument of type (.*?)|to template argument) ignores qualifiers",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}},
[k]={{s,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:119:8: error: reference binding of non-type template parameter of type \'int &\' to template argument of type \'const int\' ignores qualifiers"}
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:119:8: error: reference binding of non-type template parameter of type \'int &\' to template argument of type \'const int\' ignores qualifiers"}
Line 5,732: Line 5,751:
},
},
["err_template_arg_reference_var"]={
["err_template_arg_reference_var"]={
[i]="non-type template argument of reference type A is not an object",
[c]="non-type template argument of reference type A is not an object",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument of reference type %0 is not an object",
[g]="non-type template argument of reference type %0 is not an object",
[g]=n,
[i]=l,
[h]="non\\-type template argument of reference type (.*?) is not an object",
[j]="non\\-type template argument of reference type (.*?) is not an object",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[e]={"b242683d9992",1270146755,Ib,Ib},
[k]={{r,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}},
[k]={{s,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp:154:9: error: non-type template argument of reference type \'int &\' is not an object"}
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp:154:9: error: non-type template argument of reference type \'int &\' is not an object"}
Line 5,747: Line 5,766:
},
},
["err_template_arg_template_params_mismatch"]={
["err_template_arg_template_params_mismatch"]={
[i]="template template argument has different template parameters than its corresponding template template parameter",
[c]="template template argument has different template parameters than its corresponding template template parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template template argument has different template parameters than its corresponding template template parameter",
[g]="template template argument has different template parameters than its corresponding template template parameter",
[g]=n,
[i]=l,
[h]="template template argument has different template parameters than its corresponding template template parameter",
[j]="template template argument has different template parameters than its corresponding template template parameter",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{r,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{r,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{r,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (TemplateArgLoc.isValid()) {\n    S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}},
[k]={{s,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (TemplateArgLoc.isValid()) {\n    S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:36:14: error: template template argument has different template parameters than its corresponding template template parameter"}
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:36:14: error: template template argument has different template parameters than its corresponding template template parameter"}
Line 5,762: Line 5,781:
},
},
["err_template_arg_thread_local"]={
["err_template_arg_thread_local"]={
[i]="non-type template argument refers to thread-local object",
[c]="non-type template argument refers to thread-local object",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template argument refers to thread-local object",
[g]="non-type template argument refers to thread-local object",
[g]=n,
[i]=l,
[h]="non\\-type template argument refers to thread\\-local object",
[j]="non\\-type template argument refers to thread\\-local object",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[e]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{r,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}},
[k]={{s,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}},
[o]={
[o]={
[pb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:33:4: error: non-type template argument refers to thread-local object"}
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:33:4: error: non-type template argument refers to thread-local object"}
}
}
},
},
["err_template_arg_untyped_null_constant"]={
["err_template_arg_untyped_null_constant"]={
[i]="null non-type template argument must be cast to template parameter type A",
[c]="null non-type template argument must be cast to template parameter type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="null non-type template argument must be cast to template parameter type %0",
[g]="null non-type template argument must be cast to template parameter type %0",
[g]=n,
[i]=l,
[h]="null non\\-type template argument must be cast to template parameter type (.*?)",
[j]="null non\\-type template argument must be cast to template parameter type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type"},
[e]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type","Implement support for null non-type template arguments for non-type"},
[k]={{r,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}},
[k]={{s,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}},
[o]={
[o]={
[pb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:21:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:22:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:40:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:41:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:51:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:52:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:66:4: error: null non-type template argument must be cast to template parameter type \'std::nullptr_t\'"}
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:21:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:22:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:40:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:41:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:51:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:52:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:66:4: error: null non-type template argument must be cast to template parameter type \'std::nullptr_t\'"}
}
}
},
},
["err_template_arg_wrongtype_null_constant"]={
["err_template_arg_wrongtype_null_constant"]={
[i]="null non-type template argument of type A does not match template parameter of type B",
[c]="null non-type template argument of type A does not match template parameter of type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="null non-type template argument of type %0 does not match template parameter of type %1",
[g]="null non-type template argument of type %0 does not match template parameter of type %1",
[g]=n,
[i]=l,
[h]="null non\\-type template argument of type (.*?) does not match template parameter of type (.*?)",
[j]="null non\\-type template argument of type (.*?) does not match template parameter of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[e]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on"},
[k]={{r,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}},
[k]={{s,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}},
[o]={
[o]={
[pb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:29:4: error: null non-type template argument of type \'float *\' does not match template parameter of type \'int *\'"}
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:29:4: error: null non-type template argument of type \'float *\' does not match template parameter of type \'int *\'"}
}
}
},
},
["err_template_defn_explicit_instantiation"]={
["err_template_defn_explicit_instantiation"]={
[i]="... cannot be defined in an explicit instantiation; if this declaration is meant to be a ... definition, remove the \'template\' keyword",
[c]="... cannot be defined in an explicit instantiation; if this declaration is meant to be a ... definition, remove the \'template\' keyword",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{function|class|variable}0 cannot be defined in an explicit instantiation; if this declaration is meant to be a %select{function|class|variable}0 definition, remove the \'template\' keyword",
[g]="%select{function|class|variable}0 cannot be defined in an explicit instantiation; if this declaration is meant to be a %select{function|class|variable}0 definition, remove the \'template\' keyword",
[g]=n,
[i]=l,
[h]="(?:function|class|variable) cannot be defined in an explicit instantiation; if this declaration is meant to be a (?:function|class|variable) definition, remove the \'template\' keyword",
[j]="(?:function|class|variable) cannot be defined in an explicit instantiation; if this declaration is meant to be a (?:function|class|variable) definition, remove the \'template\' keyword",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"},
[e]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)","Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"},
[k]={{T,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  case ParsedTemplateInfo::ExplicitInstantiation: {\n    if (Tok.is(tok::semi)) {\n    } else {\n      // Check that this is a valid instantiation\n      if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{eb,2085,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  } else {\n    if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{Cb,334,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n    if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}},
[k]={{Y,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  case ParsedTemplateInfo::ExplicitInstantiation: {\n    if (Tok.is(tok::semi)) {\n    } else {\n      // Check that this is a valid instantiation\n      if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{jb,2085,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  } else {\n    if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{bc,334,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n    if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}},
[o]={
[o]={
["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:113:24: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword","clang/test/SemaTemplate/explicit-instantiation.cpp:117:31: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword"}
["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:113:24: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword","clang/test/SemaTemplate/explicit-instantiation.cpp:117:31: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword"}
Line 5,822: Line 5,841:
},
},
["err_template_different_requires_clause"]={
["err_template_different_requires_clause"]={
[i]="requires clause differs in template redeclaration",
[c]="requires clause differs in template redeclaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="requires clause differs in template redeclaration",
[g]="requires clause differs in template redeclaration",
[g]=n,
[i]=l,
[h]="requires clause differs in template redeclaration",
[j]="requires clause differs in template redeclaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[e]={"7c11da0cfd33",1567434909,vb,vb},
[k]={{r,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    auto Diagnose = [&] {\n      Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}},
[k]={{s,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    auto Diagnose = [&] {\n      Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:24:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:27:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:32:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:76:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:80:50: error: requires clause differs in template redeclaration"}
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:24:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:27:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:32:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:76:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:80:50: error: requires clause differs in template redeclaration"}
Line 5,837: Line 5,856:
},
},
["err_template_different_type_constraint"]={
["err_template_different_type_constraint"]={
[i]="type constraint differs in template redeclaration",
[c]="type constraint differs in template redeclaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type constraint differs in template redeclaration",
[g]="type constraint differs in template redeclaration",
[g]=n,
[i]=l,
[h]="type constraint differs in template redeclaration",
[j]="type constraint differs in template redeclaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={sb,1576172311,tb},
[e]={Qb,1576172311,cb,cb},
[k]={{r,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}},
[k]={{s,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:40:11: error: type constraint differs in template redeclaration"}
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:40:11: error: type constraint differs in template redeclaration"}
Line 5,852: Line 5,871:
},
},
["err_template_expansion_into_fixed_list"]={
["err_template_expansion_into_fixed_list"]={
[i]="pack expansion used as argument for non-pack parameter of ...",
[c]="pack expansion used as argument for non-pack parameter of ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pack expansion used as argument for non-pack parameter of %select{alias template|concept}0",
[g]="pack expansion used as argument for non-pack parameter of %select{alias template|concept}0",
[g]=n,
[i]=l,
[h]="pack expansion used as argument for non\\-pack parameter of (?:alias template|concept)",
[j]="pack expansion used as argument for non\\-pack parameter of (?:alias template|concept)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[e]={"349636d2bfc3",1575555459,Ob,Ob},
[k]={{r,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}},
[k]={{s,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:184:24: error: pack expansion used as argument for non-pack parameter of concept"}
["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:184:24: error: pack expansion used as argument for non-pack parameter of concept"}
Line 5,867: Line 5,886:
},
},
["err_template_id_not_a_type"]={
["err_template_id_not_a_type"]={
[i]="template name refers to non-type template A",
[c]="template name refers to non-type template A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template name refers to non-type template %0",
[g]="template name refers to non-type template %0",
[g]=n,
[i]=l,
[h]="template name refers to non\\-type template (.*?)",
[j]="template name refers to non\\-type template (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[e]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[k]={{r,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n    Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}},
[k]={{s,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n    Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}},
[o]={
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:104:36: error: template name refers to non-type template \'F\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:106:38: error: template name refers to non-type template \'::F\'"}
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:104:36: error: template name refers to non-type template \'F\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:106:38: error: template name refers to non-type template \'::F\'"}
Line 5,882: Line 5,901:
},
},
["err_template_inside_local_class"]={
["err_template_inside_local_class"]={
[i]="templates cannot be declared inside of a local class",
[c]="templates cannot be declared inside of a local class",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="templates cannot be declared inside of a local class",
[g]="templates cannot be declared inside of a local class",
[g]=n,
[i]=l,
[h]="templates cannot be declared inside of a local class",
[j]="templates cannot be declared inside of a local class",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes"},
[e]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes","Sema: Do not allow template declarations inside local classes"},
[k]={{r,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  // C++ [temp]p2:\n  //  A template-declaration can appear only as a namespace scope or\n  //  class scope declaration.\n  // C++ [temp.expl.spec]p3:\n  //  An explicit specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n  // C++ [temp.class.spec]p6: [P2096]\n  //  A partial specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n  if (Ctx) {\n    if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n      // C++ [temp.mem]p2:\n      //  A local class shall not have member templates.\n      if (RD->isLocalClass())\n        return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}},
[k]={{s,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  // C++ [temp]p2:\n  //  A template-declaration can appear only as a namespace scope or\n  //  class scope declaration.\n  // C++ [temp.expl.spec]p3:\n  //  An explicit specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n  // C++ [temp.class.spec]p6: [P2096]\n  //  A partial specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n  if (Ctx) {\n    if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n      // C++ [temp.mem]p2:\n      //  A local class shall not have member templates.\n      if (RD->isLocalClass())\n        return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:8:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:9:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:10:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:11:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:12:5: error: templates cannot be declared inside of a local class"}
["clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:8:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:9:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:10:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:11:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:12:5: error: templates cannot be declared inside of a local class"}
Line 5,897: Line 5,916:
},
},
["err_template_instantiate_undefined"]={
["err_template_instantiate_undefined"]={
[i]="... instantiation of undefined template A",
[c]="... instantiation of undefined template A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{implicit|explicit}0 instantiation of undefined template %1",
[g]="%select{implicit|explicit}0 instantiation of undefined template %1",
[g]=n,
[i]=l,
[h]="(?:implicit|explicit) instantiation of undefined template (.*?)",
[j]="(?:implicit|explicit) instantiation of undefined template (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We"},
[e]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We","Semantic analysis for explicit instantiation of class templates. We"},
[k]={{r,854,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
[k]={{s,854,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
[o]={
[o]={
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:10:8: error: implicit instantiation of undefined template \'C2<int>\'"}
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:10:8: error: implicit instantiation of undefined template \'C2<int>\'"}
Line 5,912: Line 5,931:
},
},
["err_template_instantiate_within_definition"]={
["err_template_instantiate_within_definition"]={
[i]="... instantiation of template A within its own definition",
[c]="... instantiation of template A within its own definition",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{implicit|explicit}0 instantiation of template %1 within its own definition",
[g]="%select{implicit|explicit}0 instantiation of template %1 within its own definition",
[g]=n,
[i]=l,
[h]="(?:implicit|explicit) instantiation of template (.*?) within its own definition",
[j]="(?:implicit|explicit) instantiation of template (.*?) within its own definition",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is"},
[e]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is","Diagnose attempts to implicitly instantiate a template before it is"},
[k]={{r,827,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n    Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
[k]={{s,827,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n    Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
[o]={
[o]={
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:21:12: error: implicit instantiation of template \'test1::A<int>\' within its own definition"}
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:21:12: error: implicit instantiation of template \'test1::A<int>\' within its own definition"}
Line 5,927: Line 5,946:
},
},
["err_template_kernel"]={
["err_template_kernel"]={
[i]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[c]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[g]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[g]=n,
[i]=l,
[h]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[j]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."},
[e]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions."},
[k]={{u,10714,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    if (getLangOpts().OpenCLCPlusPlus) {\n      if (FunctionTemplate) {\n        Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}},
[k]={{u,10714,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    if (getLangOpts().OpenCLCPlusPlus) {\n      if (FunctionTemplate) {\n        Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}},
[o]={
[o]={
Line 5,942: Line 5,961:
},
},
["err_template_kw_missing"]={
["err_template_kw_missing"]={
[i]="missing \'template\' keyword prior to dependent template name \'AB\'",
[c]="missing \'template\' keyword prior to dependent template name \'AB\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="missing \'template\' keyword prior to dependent template name \'%0%1\'",
[g]="missing \'template\' keyword prior to dependent template name \'%0%1\'",
[g]=n,
[i]=l,
[h]="missing \'template\' keyword prior to dependent template name \'(.*?)(.*?)\'",
[j]="missing \'template\' keyword prior to dependent template name \'(.*?)(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"},
[e]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually","Improve recovery for template-ids whose template-name doesn\'t actually"},
[k]={{q,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Handle pseudo-objects in the LHS.\n  if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n    // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n    // template, diagnose the missing \'template\' keyword instead of diagnosing\n    // an invalid use of a bound member function.\n    //\n    // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n    // to C++1z [over.over]/1.4, but we already checked for that case above.\n    if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n      if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n        Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{r,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n  Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{r,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n  // was missing.\n  if (MissingTemplateKeyword) {\n    Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}},
[k]={{r,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Handle pseudo-objects in the LHS.\n  if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n    // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n    // template, diagnose the missing \'template\' keyword instead of diagnosing\n    // an invalid use of a bound member function.\n    //\n    // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n    // to C++1z [over.over]/1.4, but we already checked for that case above.\n    if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n      if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n        Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{s,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n  Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{s,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n  // was missing.\n  if (MissingTemplateKeyword) {\n    Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}},
[o]={
[o]={
["clang/test/SemaTemplate/dependent-template-recover.cpp"]={"clang/test/SemaTemplate/dependent-template-recover.cpp:10:8: error: missing \'template\' keyword prior to dependent template name \'f1\'","clang/test/SemaTemplate/dependent-template-recover.cpp:15:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:16:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:17:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:18:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:20:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:24:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:25:17: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:28:14: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:29:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:33:12: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:34:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:36:15: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:37:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:38:10: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:42:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:68:15: error: missing \'template\' keyword prior to dependent template name \'t\'","clang/test/SemaTemplate/dependent-template-recover.cpp:86:6: error: missing \'template\' keyword prior to dependent template name \'g\'","clang/test/SemaTemplate/dependent-template-recover.cpp:77:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:78:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:79:3: error: missing \'template\' keyword prior to dependent template name \'g\'"}
["clang/test/SemaTemplate/dependent-template-recover.cpp"]={"clang/test/SemaTemplate/dependent-template-recover.cpp:10:8: error: missing \'template\' keyword prior to dependent template name \'f1\'","clang/test/SemaTemplate/dependent-template-recover.cpp:15:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:16:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:17:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:18:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:20:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:24:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:25:17: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:28:14: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:29:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:33:12: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:34:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:36:15: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:37:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:38:10: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:42:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:68:15: error: missing \'template\' keyword prior to dependent template name \'t\'","clang/test/SemaTemplate/dependent-template-recover.cpp:86:6: error: missing \'template\' keyword prior to dependent template name \'g\'","clang/test/SemaTemplate/dependent-template-recover.cpp:77:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:78:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:79:3: error: missing \'template\' keyword prior to dependent template name \'g\'"}
Line 5,957: Line 5,976:
},
},
["err_template_kw_refers_to_dependent_non_template"]={
["err_template_kw_refers_to_dependent_non_template"]={
[i]="A... cannot refer to a dependent template",
[c]="A... cannot refer to a dependent template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0%select{| following the \'template\' keyword}1 cannot refer to a dependent template",
[g]="%0%select{| following the \'template\' keyword}1 cannot refer to a dependent template",
[g]=n,
[i]=l,
[h]="(.*?)(?:| following the \'template\' keyword) cannot refer to a dependent template",
[j]="(.*?)(?:| following the \'template\' keyword) cannot refer to a dependent template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{r,5193,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}},
[k]={{s,5193,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}},
[o]={
[o]={
["clang/test/SemaCXX/literal-operators.cpp"]={"clang/test/SemaCXX/literal-operators.cpp:52:16: error: \'operator\"\"_foo\' following the \'template\' keyword cannot refer to a dependent template"}
["clang/test/SemaCXX/literal-operators.cpp"]={"clang/test/SemaCXX/literal-operators.cpp:52:16: error: \'operator\"\"_foo\' following the \'template\' keyword cannot refer to a dependent template"}
Line 5,972: Line 5,991:
},
},
["err_template_kw_refers_to_non_template"]={
["err_template_kw_refers_to_non_template"]={
[i]="A... does not refer to a template",
[c]="A... does not refer to a template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0%select{| following the \'template\' keyword}1 does not refer to a template",
[g]="%0%select{| following the \'template\' keyword}1 does not refer to a template",
[g]=n,
[i]=l,
[h]="(.*?)(?:| following the \'template\' keyword) does not refer to a template",
[j]="(.*?)(?:| following the \'template\' keyword) does not refer to a template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur"},
[e]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur","Parsing and AST representation for dependent template names that occur"},
[k]={{r,557,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (Found.empty()) {\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n    if (ExampleLookupResult && RequiredTemplate) {\n      Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}},
[k]={{s,557,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (Found.empty()) {\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n    if (ExampleLookupResult && RequiredTemplate) {\n      Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}},
[o]={
[o]={
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:25:38: error: \'apply\' following the \'template\' keyword does not refer to a template"}
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:25:38: error: \'apply\' following the \'template\' keyword does not refer to a template"}
Line 5,987: Line 6,006:
},
},
["err_template_kw_refers_to_type_template"]={
["err_template_kw_refers_to_type_template"]={
[i]="\'AB\' is expected to be a non-type template, but instantiated to a ... template",
[c]="\'AB\' is expected to be a non-type template, but instantiated to a ... template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'%0%1\' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template",
[g]="\'%0%1\' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template",
[g]=n,
[i]=l,
[h]="\'(.*?)(.*?)\' is expected to be a non\\-type template, but instantiated to a (?:class|type alias) template",
[j]="\'(.*?)(.*?)\' is expected to be a non\\-type template, but instantiated to a (?:class|type alias) template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{r,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n    Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}},
[k]={{s,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n    Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}},
[o]={
[o]={
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:54:61: error: \'Q::U\' is expected to be a non-type template, but instantiated to a class template"}
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:54:61: error: \'Q::U\' is expected to be a non-type template, but instantiated to a class template"}
Line 6,002: Line 6,021:
},
},
["err_template_linkage"]={
["err_template_linkage"]={
[i]="templates must have C++ linkage",
[c]="templates must have C++ linkage",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="templates must have C++ linkage",
[g]="templates must have C++ linkage",
[g]=n,
[i]=l,
[h]="templates must have C\\+\\+ linkage",
[j]="templates must have C\\+\\+ linkage",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  if (Ctx && Ctx->isExternCContext()) {\n    Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}},
[k]={{s,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  if (Ctx && Ctx->isExternCContext()) {\n    Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:12: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:10:3: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:13:5: error: templates must have C++ linkage"}
["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:12: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:10:3: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:13:5: error: templates must have C++ linkage"}
Line 6,017: Line 6,036:
},
},
["err_template_member"]={
["err_template_member"]={
[i]="member A declared as a template",
[c]="member A declared as a template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="member %0 declared as a template",
[g]="member %0 declared as a template",
[g]=n,
[i]=l,
[h]="member (.*?) declared as a template",
[j]="member (.*?) declared as a template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[e]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan"},
[k]={{z,3558,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      if (TemplateParams->size()) {\n        Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[k]={{A,3558,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      if (TemplateParams->size()) {\n        Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[o]={
[o]={
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"}
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"}
Line 6,032: Line 6,051:
},
},
["err_template_member_noparams"]={
["err_template_member_noparams"]={
[i]="extraneous \'template<>\' in declaration of member A",
[c]="extraneous \'template<>\' in declaration of member A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="extraneous \'template<>\' in declaration of member %0",
[g]="extraneous \'template<>\' in declaration of member %0",
[g]=n,
[i]=l,
[h]="extraneous \'template\\<\\>\' in declaration of member (.*?)",
[j]="extraneous \'template\\<\\>\' in declaration of member (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[e]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan"},
[k]={{z,3565,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      if (TemplateParams->size()) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[k]={{A,3565,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      if (TemplateParams->size()) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[o]={
[o]={
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"}
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"}
Line 6,047: Line 6,066:
},
},
["err_template_missing_args"]={
["err_template_missing_args"]={
[i]="use of ... A requires template arguments",
[c]="use of ... A requires template arguments",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="use of %select{class template|function template|variable template|alias template|template template parameter|concept|template}0 %1 requires template arguments",
[g]="use of %select{class template|function template|variable template|alias template|template template parameter|concept|template}0 %1 requires template arguments",
[g]=n,
[i]=l,
[h]="use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments",
[j]="use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type"},
[e]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type","When a template (without arguments) is passed as a template type"},
[k]={{r,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}},
[k]={{s,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}},
[o]={
[o]={
["clang/test/Parser/cxx2a-constrained-template-param.cpp"]={"clang/test/Parser/cxx2a-constrained-template-param.cpp:49:27: error: use of class template \'test1\' requires template arguments"}
["clang/test/Parser/cxx2a-constrained-template-param.cpp"]={"clang/test/Parser/cxx2a-constrained-template-param.cpp:49:27: error: use of class template \'test1\' requires template arguments"}
Line 6,062: Line 6,081:
},
},
["err_template_nontype_parm_bad_structural_type"]={
["err_template_nontype_parm_bad_structural_type"]={
[i]="a non-type template parameter cannot have type A before C++20",
[c]="a non-type template parameter cannot have type A before C++20",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a non-type template parameter cannot have type %0 before C++20",
[g]="a non-type template parameter cannot have type %0 before C++20",
[g]=n,
[i]=l,
[h]="a non\\-type template parameter cannot have type (.*?) before C\\+\\+20",
[j]="a non\\-type template parameter cannot have type (.*?) before C\\+\\+20",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{r,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  if (!getLangOpts().CPlusPlus20) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}},
[k]={{s,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  if (!getLangOpts().CPlusPlus20) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p4.cpp"]={"clang/test/CXX/temp/temp.param/p4.cpp:18:16: error: a non-type template parameter cannot have type \'float\' before C++20"}
["clang/test/CXX/temp/temp.param/p4.cpp"]={"clang/test/CXX/temp/temp.param/p4.cpp:18:16: error: a non-type template parameter cannot have type \'float\' before C++20"}
Line 6,077: Line 6,096:
},
},
["err_template_nontype_parm_bad_type"]={
["err_template_nontype_parm_bad_type"]={
[i]="a non-type template parameter cannot have type A",
[c]="a non-type template parameter cannot have type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a non-type template parameter cannot have type %0",
[g]="a non-type template parameter cannot have type %0",
[g]=n,
[i]=l,
[h]="a non\\-type template parameter cannot have type (.*?)",
[j]="a non\\-type template parameter cannot have type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n  // there\'s not much more we can say about non-scalar non-class types --\n  // because we can\'t see functions or arrays here, those can only be language\n  // extensions.\n  if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}},
[k]={{s,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n  // there\'s not much more we can say about non-scalar non-class types --\n  // because we can\'t see functions or arrays here, those can only be language\n  // extensions.\n  if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:36:24: error: a non-type template parameter cannot have type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:37:22: error: a non-type template parameter cannot have type \'_Atomic(int)\'"}
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:36:24: error: a non-type template parameter cannot have type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:37:22: error: a non-type template parameter cannot have type \'_Atomic(int)\'"}
Line 6,092: Line 6,111:
},
},
["err_template_nontype_parm_different_type"]={
["err_template_nontype_parm_different_type"]={
[i]="template non-type parameter has a different type A in template ...redeclaration",
[c]="template non-type parameter has a different type A in template ...redeclaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration",
[g]="template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration",
[g]=n,
[i]=l,
[h]="template non\\-type parameter has a different type (.*?) in template (?:|template parameter )redeclaration",
[j]="template non\\-type parameter has a different type (.*?) in template (?:|template parameter )redeclaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}},
[k]={{s,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}},
[o]={
[o]={
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:80:28: error: template non-type parameter has a different type \'long\' in template redeclaration","clang/test/SemaTemplate/friend-template.cpp:305:15: error: template non-type parameter has a different type \'char\' in template redeclaration"}
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:80:28: error: template non-type parameter has a different type \'long\' in template redeclaration","clang/test/SemaTemplate/friend-template.cpp:305:15: error: template non-type parameter has a different type \'char\' in template redeclaration"}
Line 6,107: Line 6,126:
},
},
["err_template_nontype_parm_incomplete"]={
["err_template_nontype_parm_incomplete"]={
[i]="non-type template parameter has incomplete type A",
[c]="non-type template parameter has incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template parameter has incomplete type %0",
[g]="non-type template parameter has incomplete type %0",
[g]=n,
[i]=l,
[h]="non\\-type template parameter has incomplete type (.*?)",
[j]="non\\-type template parameter has incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{r,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}},
[k]={{s,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}},
[o]={
[o]={
["clang/test/SemaCXX/invalid-template-params.cpp"]={"clang/test/SemaCXX/invalid-template-params.cpp:7:3: error: non-type template parameter has incomplete type \'class UBar\'"}
["clang/test/SemaCXX/invalid-template-params.cpp"]={"clang/test/SemaCXX/invalid-template-params.cpp:7:3: error: non-type template parameter has incomplete type \'class UBar\'"}
Line 6,122: Line 6,141:
},
},
["err_template_nontype_parm_not_literal"]={
["err_template_nontype_parm_not_literal"]={
[i]="non-type template parameter has non-literal type A",
[c]="non-type template parameter has non-literal type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template parameter has non-literal type %0",
[g]="non-type template parameter has non-literal type %0",
[g]=n,
[i]=l,
[h]="non\\-type template parameter has non\\-literal type (.*?)",
[j]="non\\-type template parameter has non\\-literal type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{r,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  if (RequireLiteralType(Loc, T, diag::err_template_nontype_parm_not_literal))"}}
[k]={{s,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  if (RequireLiteralType(Loc, T, diag::err_template_nontype_parm_not_literal))"}}
},
},
["err_template_nontype_parm_not_structural"]={
["err_template_nontype_parm_not_structural"]={
[i]="type A of non-type template parameter is not a structural type",
[c]="type A of non-type template parameter is not a structural type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type %0 of non-type template parameter is not a structural type",
[g]="type %0 of non-type template parameter is not a structural type",
[g]=n,
[i]=l,
[h]="type (.*?) of non\\-type template parameter is not a structural type",
[j]="type (.*?) of non\\-type template parameter is not a structural type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{r,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}},
[k]={{s,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:73:14: error: type \'RRef\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:78:17: error: type \'BadBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:83:18: error: type \'BadField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:88:23: error: type \'BadFieldArray\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:92:23: error: type \'ProtectedBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:96:21: error: type \'PrivateBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:100:22: error: type \'Private2Base\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:106:24: error: type \'ProtectedField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:112:22: error: type \'PrivateField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:117:23: error: type \'Private2Field\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:122:22: error: type \'MutableField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:125:36: error: type \'BadExtType<_Atomic(float)>\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:126:34: error: type \'BadExtType<_Atomic(int)>\' of non-type template parameter is not a structural type"}
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:73:14: error: type \'RRef\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:78:17: error: type \'BadBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:83:18: error: type \'BadField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:88:23: error: type \'BadFieldArray\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:92:23: error: type \'ProtectedBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:96:21: error: type \'PrivateBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:100:22: error: type \'Private2Base\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:106:24: error: type \'ProtectedField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:112:22: error: type \'PrivateField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:117:23: error: type \'Private2Field\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:122:22: error: type \'MutableField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:125:36: error: type \'BadExtType<_Atomic(float)>\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:126:34: error: type \'BadExtType<_Atomic(int)>\' of non-type template parameter is not a structural type"}
Line 6,149: Line 6,168:
},
},
["err_template_nontype_parm_rvalue_ref"]={
["err_template_nontype_parm_rvalue_ref"]={
[i]="non-type template parameter has rvalue reference type A",
[c]="non-type template parameter has rvalue reference type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-type template parameter has rvalue reference type %0",
[g]="non-type template parameter has rvalue reference type %0",
[g]=n,
[i]=l,
[h]="non\\-type template parameter has rvalue reference type (.*?)",
[j]="non\\-type template parameter has rvalue reference type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{r,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Structural types are required to be object types or lvalue references.\n  if (T->isRValueReferenceType()) {\n    Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}},
[k]={{s,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Structural types are required to be object types or lvalue references.\n  if (T->isRValueReferenceType()) {\n    Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:26:16: error: non-type template parameter has rvalue reference type \'int &&\'"}
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:26:16: error: non-type template parameter has rvalue reference type \'int &&\'"}
Line 6,164: Line 6,183:
},
},
["err_template_outside_namespace_or_class_scope"]={
["err_template_outside_namespace_or_class_scope"]={
[i]="templates can only be declared in namespace or class scope",
[c]="templates can only be declared in namespace or class scope",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="templates can only be declared in namespace or class scope",
[g]="templates can only be declared in namespace or class scope",
[g]=n,
[i]=l,
[h]="templates can only be declared in namespace or class scope",
[j]="templates can only be declared in namespace or class scope",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}},
[k]={{s,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:265:5: error: templates can only be declared in namespace or class scope"}
["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:265:5: error: templates can only be declared in namespace or class scope"}
Line 6,179: Line 6,198:
},
},
["err_template_param_default_arg_inconsistent_redefinition"]={
["err_template_param_default_arg_inconsistent_redefinition"]={
[i]="template parameter default argument is inconsistent with previous definition",
[c]="template parameter default argument is inconsistent with previous definition",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter default argument is inconsistent with previous definition",
[g]="template parameter default argument is inconsistent with previous definition",
[g]=n,
[i]=l,
[h]="template parameter default argument is inconsistent with previous definition",
[j]="template parameter default argument is inconsistent with previous definition",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{r,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}}
[k]={{s,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}}
},
},
["err_template_param_default_arg_missing"]={
["err_template_param_default_arg_missing"]={
[i]="template parameter missing a default argument",
[c]="template parameter missing a default argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter missing a default argument",
[g]="template parameter missing a default argument",
[g]=n,
[i]=l,
[h]="template parameter missing a default argument",
[j]="template parameter missing a default argument",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n    } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}},
[k]={{s,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n    } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p11.cpp"]={"clang/test/CXX/temp/temp.param/p11.cpp:6:16: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:10:31: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:14:14: error: template parameter missing a default argument"}
["clang/test/CXX/temp/temp.param/p11.cpp"]={"clang/test/CXX/temp/temp.param/p11.cpp:6:16: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:10:31: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:14:14: error: template parameter missing a default argument"}
Line 6,206: Line 6,225:
},
},
["err_template_param_default_arg_redefinition"]={
["err_template_param_default_arg_redefinition"]={
[i]="template parameter redefines default argument",
[c]="template parameter redefines default argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter redefines default argument",
[g]="template parameter redefines default argument",
[g]=n,
[i]=l,
[h]="template parameter redefines default argument",
[j]="template parameter redefines default argument",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}},
[k]={{s,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:11:24: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:21:34: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:31:18: error: template parameter redefines default argument"}
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:11:24: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:21:34: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:31:18: error: template parameter redefines default argument"}
Line 6,221: Line 6,240:
},
},
["err_template_param_different_kind"]={
["err_template_param_different_kind"]={
[i]="template parameter has a different kind in template ...redeclaration",
[c]="template parameter has a different kind in template ...redeclaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter has a different kind in template %select{|template parameter }0redeclaration",
[g]="template parameter has a different kind in template %select{|template parameter }0redeclaration",
[g]=n,
[i]=l,
[h]="template parameter has a different kind in template (?:|template parameter )redeclaration",
[j]="template parameter has a different kind in template (?:|template parameter )redeclaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8016,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_param_different_kind;"}},
[k]={{s,8016,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_param_different_kind;"}},
[o]={
[o]={
["clang/test/SemaTemplate/class-template-decl.cpp"]={"clang/test/SemaTemplate/class-template-decl.cpp:35:14: error: template parameter has a different kind in template redeclaration","clang/test/SemaTemplate/class-template-decl.cpp:50:18: error: template parameter has a different kind in template redeclaration"}
["clang/test/SemaTemplate/class-template-decl.cpp"]={"clang/test/SemaTemplate/class-template-decl.cpp:35:14: error: template parameter has a different kind in template redeclaration","clang/test/SemaTemplate/class-template-decl.cpp:50:18: error: template parameter has a different kind in template redeclaration"}
Line 6,236: Line 6,255:
},
},
["err_template_param_list_different_arity"]={
["err_template_param_list_different_arity"]={
[i]="... template parameters in template ...redeclaration",
[c]="... template parameters in template ...redeclaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration",
[g]="%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration",
[g]=n,
[i]=l,
[h]="(?:too few|too many) template parameters in template (?:|template parameter )redeclaration",
[j]="(?:too few|too many) template parameters in template (?:|template parameter )redeclaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8165,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  unsigned NextDiag = diag::err_template_param_list_different_arity;"}},
[k]={{s,8165,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  unsigned NextDiag = diag::err_template_param_list_different_arity;"}},
[o]={
[o]={
["clang/test/SemaCXX/libstdcxx_map_base_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_map_base_hack.cpp:20:5: error: too few template parameters in template redeclaration"}
["clang/test/SemaCXX/libstdcxx_map_base_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_map_base_hack.cpp:20:5: error: too few template parameters in template redeclaration"}
Line 6,251: Line 6,270:
},
},
["err_template_param_list_matches_nontemplate"]={
["err_template_param_list_matches_nontemplate"]={
[i]="template parameter list matching the non-templated nested type A should be empty (\'template<>\')",
[c]="template parameter list matching the non-templated nested type A should be empty (\'template<>\')",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter list matching the non-templated nested type %0 should be empty (\'template<>\')",
[g]="template parameter list matching the non-templated nested type %0 should be empty (\'template<>\')",
[g]=n,
[i]=l,
[h]="template parameter list matching the non\\-templated nested type (.*?) should be empty \\(\'template\\<\\>\'\\)",
[j]="template parameter list matching the non\\-templated nested type (.*?) should be empty \\(\'template\\<\\>\'\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template"},
[e]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template","Support out-of-line definitions of the members of class template"},
[k]={{r,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    if (NeedEmptyTemplateHeader) {\n      if (ParamIdx < ParamLists.size()) {\n        if (ParamLists[ParamIdx]->size() > 0) {\n          // The header has template parameters when it shouldn\'t. Complain.\n          if (!SuppressDiagnostic)\n            Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
[k]={{s,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    if (NeedEmptyTemplateHeader) {\n      if (ParamIdx < ParamLists.size()) {\n        if (ParamLists[ParamIdx]->size() > 0) {\n          // The header has template parameters when it shouldn\'t. Complain.\n          if (!SuppressDiagnostic)\n            Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp:34:1: error: template parameter list matching the non-templated nested type \'A<short>\' should be empty (\'template<>\')"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp:34:1: error: template parameter list matching the non-templated nested type \'A<short>\' should be empty (\'template<>\')"}
Line 6,266: Line 6,285:
},
},
["err_template_param_pack_default_arg"]={
["err_template_param_pack_default_arg"]={
[i]="template parameter pack cannot have a default argument",
[c]="template parameter pack cannot have a default argument",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter pack cannot have a default argument",
[g]="template parameter pack cannot have a default argument",
[g]=n,
[i]=l,
[h]="template parameter pack cannot have a default argument",
[j]="template parameter pack cannot have a default argument",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."},
[e]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments.","Parameter packs can\'t have default arguments."},
[k]={{r,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (DefaultArg && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{r,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (Default && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{r,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (IsParameterPack && !Default.isInvalid()) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}},
[k]={{s,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (DefaultArg && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{s,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (Default && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{s,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (IsParameterPack && !Default.isInvalid()) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:5:28: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:8:24: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:13:45: error: template parameter pack cannot have a default argument"}
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:5:28: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:8:24: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:13:45: error: template parameter pack cannot have a default argument"}
Line 6,281: Line 6,300:
},
},
["err_template_param_pack_must_be_last_template_parameter"]={
["err_template_param_pack_must_be_last_template_parameter"]={
[i]="template parameter pack must be the last template parameter",
[c]="template parameter pack must be the last template parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template parameter pack must be the last template parameter",
[g]="template parameter pack must be the last template parameter",
[g]=n,
[i]=l,
[h]="template parameter pack must be the last template parameter",
[j]="template parameter pack must be the last template parameter",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"327865db5323",1244848815,"A parameter pack must always come last in a class template."},
[e]={"327865db5323",1244848815,"A parameter pack must always come last in a class template.","A parameter pack must always come last in a class template."},
[k]={{r,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // C++11 [temp.param]p11:\n    //  If a template parameter of a primary class template or alias template\n    //  is a template parameter pack, it shall be the last template parameter.\n    if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{r,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // Ensure that the parameter pack, if present, is the last parameter in the\n  // template.\n  for (TemplateParameterList::const_iterator ParamIt = Params->begin(), ParamEnd = Params->end(); ParamIt != ParamEnd; ++ParamIt) {\n    if (Param->isParameterPack()) {\n      Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}},
[k]={{s,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // C++11 [temp.param]p11:\n    //  If a template parameter of a primary class template or alias template\n    //  is a template parameter pack, it shall be the last template parameter.\n    if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{s,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // Ensure that the parameter pack, if present, is the last parameter in the\n  // template.\n  for (TemplateParameterList::const_iterator ParamIt = Params->begin(), ParamEnd = Params->end(); ParamIt != ParamEnd; ++ParamIt) {\n    if (Param->isParameterPack()) {\n      Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p11-0x.cpp"]={"clang/test/CXX/temp/temp.param/p11-0x.cpp:26:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:30:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:34:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:37:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:41:38: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:44:38: error: template parameter pack must be the last template parameter"}
["clang/test/CXX/temp/temp.param/p11-0x.cpp"]={"clang/test/CXX/temp/temp.param/p11-0x.cpp:26:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:30:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:34:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:37:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:41:38: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:44:38: error: template parameter pack must be the last template parameter"}
Line 6,296: Line 6,315:
},
},
["err_template_param_shadow"]={
["err_template_param_shadow"]={
[i]="declaration of A shadows template parameter",
[c]="declaration of A shadows template parameter",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="declaration of %0 shadows template parameter",
[g]="declaration of %0 shadows template parameter",
[g]=n,
[i]=l,
[h]="declaration of (.*?) shadows template parameter",
[j]="declaration of (.*?) shadows template parameter",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{vb,1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{r,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}},
[k]={{cc,1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{s,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}},
[o]={
[o]={
[Db]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:80:11: error: declaration of \'T\' shadows template parameter","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:98:11: error: declaration of \'T\' shadows template parameter"}
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:80:11: error: declaration of \'T\' shadows template parameter","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:98:11: error: declaration of \'T\' shadows template parameter"}
}
}
},
},
["err_template_parameter_default_friend_template"]={
["err_template_parameter_default_friend_template"]={
[i]="default template argument not permitted on a friend template",
[c]="default template argument not permitted on a friend template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="default template argument not permitted on a friend template",
[g]="default template argument not permitted on a friend template",
[g]=n,
[i]=l,
[h]="default template argument not permitted on a friend template",
[j]="default template argument not permitted on a friend template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[e]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in"},
[k]={{r,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_FriendFunctionTemplate:\n    S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}},
[k]={{s,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_FriendFunctionTemplate:\n    S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:17:21: error: default template argument not permitted on a friend template"}
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:17:21: error: default template argument not permitted on a friend template"}
Line 6,326: Line 6,345:
},
},
["err_template_parameter_default_template_member"]={
["err_template_parameter_default_template_member"]={
[i]="cannot add a default template argument to the definition of a member of a class template",
[c]="cannot add a default template argument to the definition of a member of a class template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot add a default template argument to the definition of a member of a class template",
[g]="cannot add a default template argument to the definition of a member of a class template",
[g]=n,
[i]=l,
[h]="cannot add a default template argument to the definition of a member of a class template",
[j]="cannot add a default template argument to the definition of a member of a class template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[e]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in"},
[k]={{r,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_ClassTemplateMember:\n    S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}},
[k]={{s,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_ClassTemplateMember:\n    S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:32:42: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:41:21: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:42:42: error: cannot add a default template argument to the definition of a member of a class template"}
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:32:42: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:41:21: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:42:42: error: cannot add a default template argument to the definition of a member of a class template"}
Line 6,341: Line 6,360:
},
},
["err_template_parameter_pack_non_pack"]={
["err_template_parameter_pack_non_pack"]={
[i]="... parameter... conflicts with previous ... parameter...",
[c]="... parameter... conflicts with previous ... parameter...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{template type|non-type template|template template}0 parameter%select{| pack}1 conflicts with previous %select{template type|non-type template|template template}0 parameter%select{ pack|}1",
[g]="%select{template type|non-type template|template template}0 parameter%select{| pack}1 conflicts with previous %select{template type|non-type template|template template}0 parameter%select{ pack|}1",
[g]=n,
[i]=l,
[h]="(?:template type|non\\-type template|template template) parameter(?:| pack) conflicts with previous (?:template type|non\\-type template|template template) parameter(?: pack|)",
[j]="(?:template type|non\\-type template|template template) parameter(?:| pack) conflicts with previous (?:template type|non\\-type template|template template) parameter(?: pack|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[e]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"},
[k]={{r,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}},
[k]={{s,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:9:19: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:12:22: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:18:28: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:21:31: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:24:14: error: non-type template parameter conflicts with previous non-type template parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:27:36: error: template template parameter pack conflicts with previous template template parameter"}
["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:9:19: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:12:22: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:18:28: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:21:31: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:24:14: error: non-type template parameter conflicts with previous non-type template parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:27:36: error: template template parameter pack conflicts with previous template template parameter"}
Line 6,356: Line 6,375:
},
},
["err_template_qualified_declarator_no_match"]={
["err_template_qualified_declarator_no_match"]={
[i]="nested name specifier \'A\' for declaration does not refer into a class, class template or class template partial specialization",
[c]="nested name specifier \'A\' for declaration does not refer into a class, class template or class template partial specialization",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="nested name specifier \'%0\' for declaration does not refer into a class, class template or class template partial specialization",
[g]="nested name specifier \'%0\' for declaration does not refer into a class, class template or class template partial specialization",
[g]=n,
[i]=l,
[h]="nested name specifier \'(.*?)\' for declaration does not refer into a class, class template or class template partial specialization",
[j]="nested name specifier \'(.*?)\' for declaration does not refer into a class, class template or class template partial specialization",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but"},
[e]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but","Complain if we\'re entering the context of a dependent nested-name-specifier but"},
[k]={{u,6289,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getCXXScopeSpec().isInvalid())\n  else if (D.getCXXScopeSpec().isSet()) {\n    if (!DC || isa<EnumDecl>(DC)) {\n      Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{r,1862,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (SS.isNotEmpty() && !SS.isInvalid()) {\n    if (!SemanticContext) {\n      Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}},
[k]={{u,6289,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getCXXScopeSpec().isInvalid())\n  else if (D.getCXXScopeSpec().isSet()) {\n    if (!DC || isa<EnumDecl>(DC)) {\n      Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{s,1862,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (SS.isNotEmpty() && !SS.isInvalid()) {\n    if (!SemanticContext) {\n      Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/pr25181-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr25181-crash-on-invalid.cpp:6:16: error: nested name specifier \'Foo<T>::\' for declaration does not refer into a class, class template or class template partial specialization"}
["clang/test/SemaCXX/pr25181-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr25181-crash-on-invalid.cpp:6:16: error: nested name specifier \'Foo<T>::\' for declaration does not refer into a class, class template or class template partial specialization"}
Line 6,371: Line 6,390:
},
},
["err_template_recursion_depth_exceeded"]={
["err_template_recursion_depth_exceeded"]={
[i]="recursive template instantiation exceeded maximum depth of A",
[c]="recursive template instantiation exceeded maximum depth of A",
[d]="fatal error: ",
[d]="fatal error: ",
[e]="Fatal",
[f]="Fatal",
[f]="recursive template instantiation exceeded maximum depth of %0",
[g]="recursive template instantiation exceeded maximum depth of %0",
[g]="fatal error\\: ",
[i]="fatal error\\: ",
[h]="recursive template instantiation exceeded maximum depth of (.*?)",
[j]="recursive template instantiation exceeded maximum depth of (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}},
[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}},
[o]={
[o]={
Line 6,386: Line 6,405:
},
},
["err_template_spec_decl_friend"]={
["err_template_spec_decl_friend"]={
[i]="cannot declare an explicit specialization in a friend",
[c]="cannot declare an explicit specialization in a friend",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot declare an explicit specialization in a friend",
[g]="cannot declare an explicit specialization in a friend",
[g]=n,
[i]=l,
[h]="cannot declare an explicit specialization in a friend",
[j]="cannot declare an explicit specialization in a friend",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"816d75b7012a",1269416766,"Support friend function specializations."},
[e]={"816d75b7012a",1269416766,"Support friend function specializations.","Support friend function specializations."},
[k]={{u,9845,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (TemplateParams) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n        if (isFriend) {\n          Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}},
[k]={{u,9845,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (TemplateParams) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n        if (isFriend) {\n          Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}},
[o]={
[o]={
Line 6,401: Line 6,420:
},
},
["err_template_spec_decl_function_scope"]={
["err_template_spec_decl_function_scope"]={
[i]="explicit specialization of A in function scope",
[c]="explicit specialization of A in function scope",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="explicit specialization of %0 in function scope",
[g]="explicit specialization of %0 in function scope",
[g]=n,
[i]=l,
[h]="explicit specialization of (.*?) in function scope",
[j]="explicit specialization of (.*?) in function scope",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p2:\n  //  An explicit specialization may be declared in any scope in which\n  //  the corresponding primary template may be defined.\n  if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n    S.Diag(Loc, diag::err_template_spec_decl_function_scope) << Specialized;"}}
[k]={{s,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p2:\n  //  An explicit specialization may be declared in any scope in which\n  //  the corresponding primary template may be defined.\n  if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n    S.Diag(Loc, diag::err_template_spec_decl_function_scope) << Specialized;"}}
},
},
["err_template_spec_default_arg"]={
["err_template_spec_default_arg"]={
[i]="default argument not permitted on an explicit ... of function A",
[c]="default argument not permitted on an explicit ... of function A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1",
[g]="default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1",
[g]=n,
[i]=l,
[h]="default argument not permitted on an explicit (?:instantiation|specialization) of function (.*?)",
[j]="default argument not permitted on an explicit (?:instantiation|specialization) of function (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a"},
[e]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a","Diagnose attempts to add default function arguments to a"},
[k]={{z,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // 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    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}},
[k]={{A,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // 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    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:10:22: error: default argument not permitted on an explicit specialization of function \'mf1\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:15:27: error: default argument not permitted on an explicit specialization of function \'mf2\'"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:10:22: error: default argument not permitted on an explicit specialization of function \'mf1\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:15:27: error: default argument not permitted on an explicit specialization of function \'mf2\'"}
Line 6,428: Line 6,447:
},
},
["err_template_spec_extra_headers"]={
["err_template_spec_extra_headers"]={
[i]="extraneous template parameter list in template specialization or out-of-line template definition",
[c]="extraneous template parameter list in template specialization or out-of-line template definition",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="extraneous template parameter list in template specialization or out-of-line template definition",
[g]="extraneous template parameter list in template specialization or out-of-line template definition",
[g]=n,
[i]=l,
[h]="extraneous template parameter list in template specialization or out\\-of\\-line template definition",
[j]="extraneous template parameter list in template specialization or out\\-of\\-line template definition",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    if (!SuppressDiagnostic)\n      Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}},
[k]={{s,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    if (!SuppressDiagnostic)\n      Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}},
[o]={
[o]={
["clang/test/SemaTemplate/crash-8204126.cpp"]={"clang/test/SemaTemplate/crash-8204126.cpp:4:3: error: extraneous template parameter list in template specialization or out-of-line template definition"}
["clang/test/SemaTemplate/crash-8204126.cpp"]={"clang/test/SemaTemplate/crash-8204126.cpp:4:3: error: extraneous template parameter list in template specialization or out-of-line template definition"}
Line 6,443: Line 6,462:
},
},
["err_template_spec_friend"]={
["err_template_spec_friend"]={
[i]="template specialization declaration cannot be a friend",
[c]="template specialization declaration cannot be a friend",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template specialization declaration cannot be a friend",
[g]="template specialization declaration cannot be a friend",
[g]=n,
[i]=l,
[h]="template specialization declaration cannot be a friend",
[j]="template specialization declaration cannot be a friend",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend"},
[e]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend","Improve the internal representation and semantic analysis of friend"},
[k]={{r,8698,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (TemplateParams && TemplateParams->size() > 0) {\n  } else if (TemplateParams) {\n    if (TUK == TUK_Friend)\n      Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}},
[k]={{s,8698,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (TemplateParams && TemplateParams->size() > 0) {\n  } else if (TemplateParams) {\n    if (TUK == TUK_Friend)\n      Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:10:21: error: template specialization declaration cannot be a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:22: error: template specialization declaration cannot be a friend"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:10:21: error: template specialization declaration cannot be a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:22: error: template specialization declaration cannot be a friend"}
Line 6,458: Line 6,477:
},
},
["err_template_spec_needs_header"]={
["err_template_spec_needs_header"]={
[i]="template specialization requires \'template<>\'",
[c]="template specialization requires \'template<>\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template specialization requires \'template<>\'",
[g]="template specialization requires \'template<>\'",
[g]=n,
[i]=l,
[h]="template specialization requires \'template\\<\\>\'",
[j]="template specialization requires \'template\\<\\>\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n    if (!SuppressDiagnostic)\n      Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}},
[k]={{s,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n    if (!SuppressDiagnostic)\n      Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:12:34: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:22:11: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:23:17: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: template specialization requires \'template<>\'"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:12:34: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:22:11: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:23:17: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: template specialization requires \'template<>\'"}
Line 6,473: Line 6,492:
},
},
["err_template_spec_needs_template_parameters"]={
["err_template_spec_needs_template_parameters"]={
[i]="template specialization or definition requires a template parameter list corresponding to the nested type A",
[c]="template specialization or definition requires a template parameter list corresponding to the nested type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template specialization or definition requires a template parameter list corresponding to the nested type %0",
[g]="template specialization or definition requires a template parameter list corresponding to the nested type %0",
[g]=n,
[i]=l,
[h]="template specialization or definition requires a template parameter list corresponding to the nested type (.*?)",
[j]="template specialization or definition requires a template parameter list corresponding to the nested type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the"},
[e]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the","Basic parsing and semantic analysis for out-of-line definitions of the"},
[k]={{r,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    if (NeedNonemptyTemplateHeader) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
[k]={{s,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    if (NeedNonemptyTemplateHeader) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
[o]={
[o]={
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:283:13: error: template specialization or definition requires a template parameter list corresponding to the nested type \'A<T>\'"}
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:283:13: error: template specialization or definition requires a template parameter list corresponding to the nested type \'A<T>\'"}
Line 6,488: Line 6,507:
},
},
["err_template_spec_redecl_global_scope"]={
["err_template_spec_redecl_global_scope"]={
[i]="... specialization of A must occur at global scope",
[c]="... specialization of A must occur at global scope",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 must occur at global scope",
[g]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 must occur at global scope",
[g]=n,
[i]=l,
[h]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) must occur at global scope",
[j]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) must occur at global scope",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n      S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}},
[k]={{s,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n      S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:121:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:122:16: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:126:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:127:16: error: variable template specialization of \'v1\' must occur at global scope"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:121:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:122:16: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:126:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:127:16: error: variable template specialization of \'v1\' must occur at global scope"}
Line 6,503: Line 6,522:
},
},
["err_template_spec_redecl_out_of_scope"]={
["err_template_spec_redecl_out_of_scope"]={
[i]="... specialization of A not in ...",
[c]="... specialization of A not in ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3",
[g]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3",
[g]=n,
[i]=l,
[h]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) not in (?:a namespace enclosing (.*?)|class (.*?) or an enclosing namespace)",
[j]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) not in (?:a namespace enclosing (.*?)|class (.*?) or an enclosing namespace)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n    else {\n      int Diag = diag::err_template_spec_redecl_out_of_scope;"}},
[k]={{s,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n    else {\n      int Diag = diag::err_template_spec_redecl_out_of_scope;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:81:25: error: class template specialization of \'X0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:119:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:120:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:124:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:125:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:199:28: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:202:33: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:235:23: error: class template specialization of \'InnerTemplate\' not in class \'X0<int>\' or an enclosing namespace"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:81:25: error: class template specialization of \'X0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:119:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:120:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:124:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:125:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:199:28: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:202:33: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:235:23: error: class template specialization of \'InnerTemplate\' not in class \'X0<int>\' or an enclosing namespace"}
Line 6,518: Line 6,537:
},
},
["err_template_spec_syntax_non_template"]={
["err_template_spec_syntax_non_template"]={
[i]="identifier followed by \'<\' indicates a class template specialization but A ...",
[c]="identifier followed by \'<\' indicates a class template specialization but A ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>|<unused>|refers to a concept}1",
[g]="identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>|<unused>|refers to a concept}1",
[g]=n,
[i]=l,
[h]="identifier followed by \'\\<\' indicates a class template specialization but (.*?) (?:does not refer to a template|refers to a function template|\\<unused\\>|refers to a variable template|\\<unused\\>|\\<unused\\>|refers to a concept)",
[j]="identifier followed by \'\\<\' indicates a class template specialization but (.*?) (?:does not refer to a template|refers to a function template|\\<unused\\>|refers to a variable template|\\<unused\\>|\\<unused\\>|refers to a concept)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{eb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (Tok.is(tok::identifier)) {\n  } else if (Tok.is(tok::annot_template_id)) {\n    if (TemplateId && !TemplateId->mightBeType()) {\n      Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}},
[k]={{jb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (Tok.is(tok::identifier)) {\n  } else if (Tok.is(tok::annot_template_id)) {\n    if (TemplateId && !TemplateId->mightBeType()) {\n      Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}},
[o]={
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:13:14: error: identifier followed by \'<\' indicates a class template specialization but \'Ident\' refers to a function template"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:13:14: error: identifier followed by \'<\' indicates a class template specialization but \'Ident\' refers to a function template"}
Line 6,533: Line 6,552:
},
},
["err_template_spec_unknown_kind"]={
["err_template_spec_unknown_kind"]={
[i]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, ... of a class template",
[c]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, ... of a class template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, %select{or member class|member class, or member enumeration}0 of a class template",
[g]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, %select{or member class|member class, or member enumeration}0 of a class template",
[g]=n,
[i]=l,
[h]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, (?:or member class|member class, or member enumeration) of a class template",
[j]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, (?:or member class|member class, or member enumeration) of a class template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[e]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization"},
[k]={{r,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}}
[k]={{s,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}}
},
},
["err_template_tag_noparams"]={
["err_template_tag_noparams"]={
[i]="extraneous \'template<>\' in declaration of A B",
[c]="extraneous \'template<>\' in declaration of A B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="extraneous \'template<>\' in declaration of %0 %1",
[g]="extraneous \'template<>\' in declaration of %0 %1",
[g]=n,
[i]=l,
[h]="extraneous \'template\\<\\>\' in declaration of (.*?) (.*?)",
[j]="extraneous \'template\\<\\>\' in declaration of (.*?) (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class"},
[e]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class","Improve checking for specializations of member classes of class"},
[k]={{u,16817,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // We only need to do this matching if we have template parameters\n  // or a scope specifier, which also conveniently avoids this work\n  // for non-C++ cases.\n  if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n    if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{z,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n  if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n    if (TemplateParams->size() > 0) {\n    } else {\n      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}},
[k]={{u,16817,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // We only need to do this matching if we have template parameters\n  // or a scope specifier, which also conveniently avoids this work\n  // for non-C++ cases.\n  if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n    if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{A,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n  if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n    if (TemplateParams->size() > 0) {\n    } else {\n      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}},
[o]={
[o]={
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"}
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"}
Line 6,560: Line 6,579:
},
},
["err_template_template_parameter_not_at_least_as_constrained"]={
["err_template_template_parameter_not_at_least_as_constrained"]={
[i]="template template argument A is more constrained than template template parameter B",
[c]="template template argument A is more constrained than template template parameter B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template template argument %0 is more constrained than template template parameter %1",
[g]="template template argument %0 is more constrained than template template parameter %1",
[g]=n,
[i]=l,
[h]="template template argument (.*?) is more constrained than template template parameter (.*?)",
[j]="template template argument (.*?) is more constrained than template template parameter (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={sb,1576172311,tb},
[e]={Qb,1576172311,cb,cb},
[k]={{r,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}},
[k]={{s,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:14:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:19:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:44:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:49:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'"}
["clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:14:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:19:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:44:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:49:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'"}
Line 6,575: Line 6,594:
},
},
["err_template_template_parm_no_parms"]={
["err_template_template_parm_no_parms"]={
[i]="template template parameter must have its own template parameters",
[c]="template template parameter must have its own template parameters",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="template template parameter must have its own template parameters",
[g]="template template parameter must have its own template parameters",
[g]=n,
[i]=l,
[h]="template template parameter must have its own template parameters",
[j]="template template parameter must have its own template parameters",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"},
[e]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that","Diagnose the declaration of template template parameters that"},
[k]={{r,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (Params->size() == 0) {\n    Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}},
[k]={{s,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (Params->size() == 0) {\n    Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p1.cpp"]={"clang/test/CXX/temp/temp.param/p1.cpp:4:27: error: template template parameter must have its own template parameters"}
["clang/test/CXX/temp/temp.param/p1.cpp"]={"clang/test/CXX/temp/temp.param/p1.cpp:4:27: error: template template parameter must have its own template parameters"}
Line 6,590: Line 6,609:
},
},
["err_template_typedef"]={
["err_template_typedef"]={
[i]="a typedef cannot be a template",
[c]="a typedef cannot be a template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a typedef cannot be a template",
[g]="a typedef cannot be a template",
[g]=n,
[i]=l,
[h]="a typedef cannot be a template",
[j]="a typedef cannot be a template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to"},
[e]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to","Start propagating template parameter lists to the right places to"},
[k]={{u,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n    if (TemplateParamLists.size()) {\n      Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}},
[k]={{u,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n    if (TemplateParamLists.size()) {\n      Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}},
[o]={
[o]={
Line 6,605: Line 6,624:
},
},
["err_template_unnamed_class"]={
["err_template_unnamed_class"]={
[i]="cannot declare a class template with no name",
[c]="cannot declare a class template with no name",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot declare a class template with no name",
[g]="cannot declare a class template with no name",
[g]=n,
[i]=l,
[h]="cannot declare a class template with no name",
[j]="cannot declare a class template with no name",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{r,1842,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // There is no such thing as an unnamed class template.\n  if (!Name) {\n    Diag(KWLoc, diag::err_template_unnamed_class);"}}
[k]={{s,1842,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // There is no such thing as an unnamed class template.\n  if (!Name) {\n    Diag(KWLoc, diag::err_template_unnamed_class);"}}
},
},
["err_template_variable_noparams"]={
["err_template_variable_noparams"]={
[i]="extraneous \'template<>\' in declaration of variable A",
[c]="extraneous \'template<>\' in declaration of variable A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="extraneous \'template<>\' in declaration of variable %0",
[g]="extraneous \'template<>\' in declaration of variable %0",
[g]=n,
[i]=l,
[h]="extraneous \'template\\<\\>\' in declaration of variable (.*?)",
[j]="extraneous \'template\\<\\>\' in declaration of variable (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static"},
[e]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static","Implement parsing and semantic analysis for out-of-line definitions of static"},
[k]={{u,7631,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[k]={{u,7631,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[o]={
[o]={
Line 6,632: Line 6,651:
},
},
["err_templated_invalid_declaration"]={
["err_templated_invalid_declaration"]={
[i]="a static_assert declaration cannot be a template",
[c]="a static_assert declaration cannot be a template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a static_assert declaration cannot be a template",
[g]="a static_assert declaration cannot be a template",
[g]=n,
[i]=l,
[h]="a static_assert declaration cannot be a template",
[j]="a static_assert declaration cannot be a template",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently..."},
[e]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently...","A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently accepting and producing possibly-unexpected behavior."},
[k]={{Cb,197,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  if (Tok.is(tok::kw_static_assert)) {\n    Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}},
[k]={{bc,197,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  if (Tok.is(tok::kw_static_assert)) {\n    Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}},
[o]={
[o]={
["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:5:3: error: a static_assert declaration cannot be a template","clang/test/Parser/cxx11-templates.cpp:9:1: error: a static_assert declaration cannot be a template"}
["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:5:3: error: a static_assert declaration cannot be a template","clang/test/Parser/cxx11-templates.cpp:9:1: error: a static_assert declaration cannot be a template"}
Line 6,647: Line 6,666:
},
},
["err_templated_using_directive_declaration"]={
["err_templated_using_directive_declaration"]={
[i]="cannot template a using ...",
[c]="cannot template a using ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot template a using %select{directive|declaration}0",
[g]="cannot template a using %select{directive|declaration}0",
[g]=n,
[i]=l,
[h]="cannot template a using (?:directive|declaration)",
[j]="cannot template a using (?:directive|declaration)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[e]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select."},
[k]={{eb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n  // \'using namespace\' means this is a using-directive.\n  if (Tok.is(tok::kw_namespace)) {\n    // Template parameters are always an error here.\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{eb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{eb,806,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // Diagnose an attempt to declare a templated using-declaration.\n  // In C++11, alias-declarations can be templates:\n  //  template <...> using id = type;\n  if (TemplateInfo.Kind) {\n    Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}},
[k]={{jb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n  // \'using namespace\' means this is a using-directive.\n  if (Tok.is(tok::kw_namespace)) {\n    // Template parameters are always an error here.\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{jb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{jb,806,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // Diagnose an attempt to declare a templated using-declaration.\n  // In C++11, alias-declarations can be templates:\n  //  template <...> using id = type;\n  if (TemplateInfo.Kind) {\n    Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}},
[o]={
[o]={
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"}
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"}
Line 6,662: Line 6,681:
},
},
["err_tentative_def_incomplete_type"]={
["err_tentative_def_incomplete_type"]={
[i]="tentative definition has type A that is never completed",
[c]="tentative definition has type A that is never completed",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="tentative definition has type %0 that is never completed",
[g]="tentative definition has type %0 that is never completed",
[g]=n,
[i]=l,
[h]="tentative definition has type (.*?) that is never completed",
[j]="tentative definition has type (.*?) that is never completed",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{mb,1314,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n    } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}},
[k]={{yb,1314,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n    } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}},
[o]={
[o]={
["clang/test/Misc/verify.c"]={"clang/test/Misc/verify.c:6:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:7:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:10:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:11:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:12:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:13:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:14:10: error: tentative definition has type \'struct s\' that is never completed"}
["clang/test/Misc/verify.c"]={"clang/test/Misc/verify.c:6:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:7:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:10:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:11:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:12:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:13:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:14:10: error: tentative definition has type \'struct s\' that is never completed"}
Line 6,677: Line 6,696:
},
},
["err_test_module_file_extension_format"]={
["err_test_module_file_extension_format"]={
[i]="-ftest-module-file-extension argument \'A\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[c]="-ftest-module-file-extension argument \'A\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="-ftest-module-file-extension argument \'%0\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[g]="-ftest-module-file-extension argument \'%0\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[g]=n,
[i]=l,
[h]="\\-ftest\\-module\\-file\\-extension argument \'(.*?)\' is not of the required form \'blockname\\:major\\:minor\\:hashed\\:user info\'",
[j]="\\-ftest\\-module\\-file\\-extension argument \'(.*?)\' is not of the required form \'blockname\\:major\\:minor\\:hashed\\:user info\'",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[e]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."},
[k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n  for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n    if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n      Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}}
[k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n  for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n    if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n      Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}}
},
},
["err_test_module_file_extension_version"]={
["err_test_module_file_extension_version"]={
[i]="test module file extension \'A\' has different version (B.C) than expected (D.E)",
[c]="test module file extension \'A\' has different version (B.C) than expected (D.E)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="test module file extension \'%0\' has different version (%1.%2) than expected (%3.%4)",
[g]="test module file extension \'%0\' has different version (%1.%2) than expected (%3.%4)",
[g]=n,
[i]=l,
[h]="test module file extension \'(.*?)\' has different version \\((.*?)\\.(.*?)\\) than expected \\((.*?)\\.(.*?)\\)",
[j]="test module file extension \'(.*?)\' has different version \\((.*?)\\.(.*?)\\) than expected \\((.*?)\\.(.*?)\\)",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[e]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."},
[k]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n  if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n    Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}},
[k]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n  if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n    Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}},
[o]={
[o]={
Line 6,704: Line 6,723:
},
},
["err_this_capture"]={
["err_this_capture"]={
[i]="\'this\' cannot be ...captured in this context",
[c]="\'this\' cannot be ...captured in this context",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'this\' cannot be %select{implicitly |}0captured in this context",
[g]="\'this\' cannot be %select{implicitly |}0captured in this context",
[g]=n,
[i]=l,
[h]="\'this\' cannot be (?:implicitly |)captured in this context",
[j]="\'this\' cannot be (?:implicitly |)captured in this context",
[b]=a,
[b]=a,
[j]="Lambda Issue",
[h]="Lambda Issue",
[c]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which"},
[e]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which","Introduce the lambda scope before determining explicit captures, which"},
[k]={{F,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n        // This context can\'t implicitly capture \'this\'; fail out.\n        if (BuildAndDiagnose) {\n          Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{F,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      // This context can\'t implicitly capture \'this\'; fail out.\n      if (BuildAndDiagnose)\n        Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{vb,1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (ThisCaptureType.isNull()) {\n        Diag(C->Loc, diag::err_this_capture) << true;"}},
[k]={{J,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n        // This context can\'t implicitly capture \'this\'; fail out.\n        if (BuildAndDiagnose) {\n          Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{J,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      // This context can\'t implicitly capture \'this\'; fail out.\n      if (BuildAndDiagnose)\n        Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{cc,1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (ThisCaptureType.isNull()) {\n        Diag(C->Loc, diag::err_this_capture) << true;"}},
[o]={
[o]={
["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:20:7: error: \'this\' cannot be captured in this context"}
["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:20:7: error: \'this\' cannot be captured in this context"}
Line 6,719: Line 6,738:
},
},
["err_this_captured_by_reference"]={
["err_this_captured_by_reference"]={
[i]="\'this\' cannot be captured by reference",
[c]="\'this\' cannot be captured by reference",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'this\' cannot be captured by reference",
[g]="\'this\' cannot be captured by reference",
[g]=n,
[i]=l,
[h]="\'this\' cannot be captured by reference",
[j]="\'this\' cannot be captured by reference",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from"},
[e]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from","Parsing of C++0x lambda expressions, from John Freeman with help from"},
[k]={{hb,969,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  while (Tok.isNot(tok::r_square)) {\n    if (Tok.is(tok::star)) {\n    } else if (Tok.is(tok::kw_this)) {\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n    } else {\n      if (Tok.is(tok::identifier)) {\n      } else if (Tok.is(tok::kw_this)) {\n        return Invalid([&] {\n          Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}},
[k]={{nb,969,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  while (Tok.isNot(tok::r_square)) {\n    if (Tok.is(tok::star)) {\n    } else if (Tok.is(tok::kw_this)) {\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n    } else {\n      if (Tok.is(tok::identifier)) {\n      } else if (Tok.is(tok::kw_this)) {\n        return Invalid([&] {\n          Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}},
[o]={
[o]={
["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:17:11: error: \'this\' cannot be captured by reference","clang/test/Parser/cxx0x-lambda-expressions.cpp:18:7: error: \'this\' cannot be captured by reference"}
["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:17:11: error: \'this\' cannot be captured by reference","clang/test/Parser/cxx0x-lambda-expressions.cpp:18:7: error: \'this\' cannot be captured by reference"}
Line 6,734: Line 6,753:
},
},
["err_this_static_member_func"]={
["err_this_static_member_func"]={
[i]="\'this\' cannot be... used in a static member function declaration",
[c]="\'this\' cannot be... used in a static member function declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'this\' cannot be%select{| implicitly}0 used in a static member function declaration",
[g]="\'this\' cannot be%select{| implicitly}0 used in a static member function declaration",
[g]=n,
[i]=l,
[h]="\'this\' cannot be(?:| implicitly) used in a static member function declaration",
[j]="\'this\' cannot be(?:| implicitly) used in a static member function declaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"},
[e]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'","Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"},
[k]={{z,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n  bool VisitCXXThisExpr(CXXThisExpr *E) {\n    S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}},
[k]={{A,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n  bool VisitCXXThisExpr(CXXThisExpr *E) {\n    S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}},
[o]={
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:112:33: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:113:33: error: \'this\' cannot be used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:117:38: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:120:28: error: \'this\' cannot be implicitly used in a static member function declaration"}
["clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:112:33: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:113:33: error: \'this\' cannot be used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:117:38: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:120:28: error: \'this\' cannot be implicitly used in a static member function declaration"}
Line 6,749: Line 6,768:
},
},
["err_thread_dynamic_init"]={
["err_thread_dynamic_init"]={
[i]="initializer for thread-local variable must be a constant expression",
[c]="initializer for thread-local variable must be a constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="initializer for thread-local variable must be a constant expression",
[g]="initializer for thread-local variable must be a constant expression",
[g]=n,
[i]=l,
[h]="initializer for thread\\-local variable must be a constant expression",
[j]="initializer for thread\\-local variable must be a constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[e]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[k]={{u,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}},
[k]={{u,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}},
[o]={
[o]={
Line 6,764: Line 6,783:
},
},
["err_thread_non_global"]={
["err_thread_non_global"]={
[i]="\'A\' variables must have global storage",
[c]="\'A\' variables must have global storage",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'%0\' variables must have global storage",
[g]="\'%0\' variables must have global storage",
[g]=n,
[i]=l,
[h]="\'(.*?)\' variables must have global storage",
[j]="\'(.*?)\' variables must have global storage",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers."},
[k]={{u,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{Q,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VD->hasLocalStorage()) {\n    S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}},
[k]={{u,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{V,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VD->hasLocalStorage()) {\n    S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}},
[o]={
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:46:3: error: \'_Thread_local\' variables must have global storage","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:54:3: error: \'__thread\' variables must have global storage"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:46:3: error: \'_Thread_local\' variables must have global storage","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:54:3: error: \'__thread\' variables must have global storage"}
Line 6,779: Line 6,798:
},
},
["err_thread_non_thread"]={
["err_thread_non_thread"]={
[i]="thread-local declaration of A follows non-thread-local declaration",
[c]="thread-local declaration of A follows non-thread-local declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="thread-local declaration of %0 follows non-thread-local declaration",
[g]="thread-local declaration of %0 follows non-thread-local declaration",
[g]=n,
[i]=l,
[h]="thread\\-local declaration of (.*?) follows non\\-thread\\-local declaration",
[j]="thread\\-local declaration of (.*?) follows non\\-thread\\-local declaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers."},
[k]={{u,4707,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n      Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}},
[k]={{u,4707,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n      Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}},
[o]={
[o]={
Line 6,794: Line 6,813:
},
},
["err_thread_nontrivial_dtor"]={
["err_thread_nontrivial_dtor"]={
[i]="type of thread-local variable has non-trivial destruction",
[c]="type of thread-local variable has non-trivial destruction",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type of thread-local variable has non-trivial destruction",
[g]="type of thread-local variable has non-trivial destruction",
[g]=n,
[i]=l,
[h]="type of thread\\-local variable has non\\-trivial destruction",
[j]="type of thread\\-local variable has non\\-trivial destruction",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[e]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[k]={{u,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}},
[k]={{u,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}},
[o]={
[o]={
Line 6,809: Line 6,828:
},
},
["err_thread_thread_different_kind"]={
["err_thread_thread_different_kind"]={
[i]="thread-local declaration of A with ... initialization follows declaration with ... initialization",
[c]="thread-local declaration of A with ... initialization follows declaration with ... initialization",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization",
[g]="thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization",
[g]=n,
[i]=l,
[h]="thread\\-local declaration of (.*?) with (?:static|dynamic) initialization follows declaration with (?:dynamic|static) initialization",
[j]="thread\\-local declaration of (.*?) with (?:static|dynamic) initialization follows declaration with (?:dynamic|static) initialization",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."},
[e]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.","Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."},
[k]={{u,4717,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n    } else if (!New->getTLSKind()) {\n    } else {\n      Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}},
[k]={{u,4717,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n    } else if (!New->getTLSKind()) {\n    } else {\n      Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}},
[o]={
[o]={
Line 6,824: Line 6,843:
},
},
["err_thread_unsupported"]={
["err_thread_unsupported"]={
[i]="thread-local storage is not supported for the current target",
[c]="thread-local storage is not supported for the current target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="thread-local storage is not supported for the current target",
[g]="thread-local storage is not supported for the current target",
[g]=n,
[i]=l,
[h]="thread\\-local storage is not supported for the current target",
[j]="thread\\-local storage is not supported for the current target",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it."},
[e]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it.","Print an error for uses of __thread on targets which don\'t support it."},
[k]={{u,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n    else if (!Context.getTargetInfo().isTLSSupported()) {\n      if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n      } else\n        Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n      targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{Q,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.Context.getTargetInfo().isTLSSupported()) {\n    S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{q,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n    if (!Context.getTargetInfo().isTLSSupported())\n      if (const auto *VD = dyn_cast<VarDecl>(D))\n        if (VD->getTLSKind() != VarDecl::TLS_None)\n          targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}},
[k]={{u,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n    else if (!Context.getTargetInfo().isTLSSupported()) {\n      if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n      } else\n        Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n      targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{V,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.Context.getTargetInfo().isTLSSupported()) {\n    S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{r,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n    if (!Context.getTargetInfo().isTLSSupported())\n      if (const auto *VD = dyn_cast<VarDecl>(D))\n        if (VD->getTLSKind() != VarDecl::TLS_None)\n          targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}},
[o]={
[o]={
["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:29:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:31:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:33:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:35:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:18:26: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:20:20: error: thread-local storage is not supported for the current target"}
["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:29:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:31:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:33:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:35:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:18:26: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:20:20: error: thread-local storage is not supported for the current target"}
Line 6,839: Line 6,858:
},
},
["err_three_way_vector_comparison"]={
["err_three_way_vector_comparison"]={
[i]="three-way comparison between vectors is not supported",
[c]="three-way comparison between vectors is not supported",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="three-way comparison between vectors is not supported",
[g]="three-way comparison between vectors is not supported",
[g]=n,
[i]=l,
[h]="three\\-way comparison between vectors is not supported",
[j]="three\\-way comparison between vectors is not supported",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[e]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles."},
[k]={{q,13510,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"},{q,13671,"QualType Sema::CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"}},
[k]={{r,13510,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"},{r,13671,"QualType Sema::CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"}},
[o]={
[o]={
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:419:15: error: three-way comparison between vectors is not supported"}
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:419:15: error: three-way comparison between vectors is not supported"}
Line 6,854: Line 6,873:
},
},
["err_throw_abstract_type"]={
["err_throw_abstract_type"]={
[i]="cannot throw an object of abstract type A",
[c]="cannot throw an object of abstract type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot throw an object of abstract type %0",
[g]="cannot throw an object of abstract type %0",
[g]=n,
[i]=l,
[h]="cannot throw an object of abstract type (.*?)",
[j]="cannot throw an object of abstract type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."},
[e]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type.","Diagnose attempts to throw an abstract class type."},
[k]={{F,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}},
[k]={{J,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}},
[o]={
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"}
[Sb]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"}
}
}
},
},
["err_throw_incomplete"]={
["err_throw_incomplete"]={
[i]="cannot throw object of incomplete type A",
[c]="cannot throw object of incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot throw object of incomplete type %0",
[g]="cannot throw object of incomplete type %0",
[g]=n,
[i]=l,
[h]="cannot throw object of incomplete type (.*?)",
[j]="cannot throw object of incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[e]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."},
[k]={{F,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
[k]={{J,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
[o]={
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"}
[Sb]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"}
}
}
},
},
["err_throw_incomplete_ptr"]={
["err_throw_incomplete_ptr"]={
[i]="cannot throw pointer to object of incomplete type A",
[c]="cannot throw pointer to object of incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot throw pointer to object of incomplete type %0",
[g]="cannot throw pointer to object of incomplete type %0",
[g]=n,
[i]=l,
[h]="cannot throw pointer to object of incomplete type (.*?)",
[j]="cannot throw pointer to object of incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[e]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."},
[k]={{F,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
[k]={{J,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
[o]={
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"}
[Sb]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"}
}
}
},
},
["err_throw_sizeless"]={
["err_throw_sizeless"]={
[i]="cannot throw object of sizeless type A",
[c]="cannot throw object of sizeless type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot throw object of sizeless type %0",
[g]="cannot throw object of sizeless type %0",
[g]=n,
[i]=l,
[h]="cannot throw object of sizeless type (.*?)",
[j]="cannot throw object of sizeless type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{F,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (!isPointer && Ty->isSizelessType()) {\n      Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}},
[k]={{J,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (!isPointer && Ty->isSizelessType()) {\n      Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:361:3: error: cannot throw object of sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:361:3: error: cannot throw object of sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
Line 6,914: Line 6,933:
},
},
["err_tls_var_aligned_over_maximum"]={
["err_tls_var_aligned_over_maximum"]={
[i]="alignment (A) of thread-local variable B is greater than the maximum supported alignment (C) for a thread-local variable on this target",
[c]="alignment (A) of thread-local variable B is greater than the maximum supported alignment (C) for a thread-local variable on this target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="alignment (%0) of thread-local variable %1 is greater than the maximum supported alignment (%2) for a thread-local variable on this target",
[g]="alignment (%0) of thread-local variable %1 is greater than the maximum supported alignment (%2) for a thread-local variable on this target",
[g]=n,
[i]=l,
[h]="alignment \\((.*?)\\) of thread\\-local variable (.*?) is greater than the maximum supported alignment \\((.*?)\\) for a thread\\-local variable on this target",
[j]="alignment \\((.*?)\\) of thread\\-local variable (.*?) is greater than the maximum supported alignment \\((.*?)\\) for a thread\\-local variable on this target",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it"},
[e]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it","Add a \"maximum TLS alignment\" characteristic to the target info, so it"},
[k]={{u,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n  // Perform TLS alignment check here after attributes attached to the variable\n  // which may affect the alignment have been processed. Only perform the check\n  // if the target has a maximum TLS alignment (zero means no constraints).\n  if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n    // Protect the check so that it\'s not performed on dependent types and\n    // dependent alignments (we can\'t determine the alignment in that case).\n    if (!VD->hasDependentAlignment()) {\n      if (Context.getDeclAlign(VD) > MaxAlignChars) {\n        Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{Q,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (VD) {\n    if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n      Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}},
[k]={{u,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n  // Perform TLS alignment check here after attributes attached to the variable\n  // which may affect the alignment have been processed. Only perform the check\n  // if the target has a maximum TLS alignment (zero means no constraints).\n  if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n    // Protect the check so that it\'s not performed on dependent types and\n    // dependent alignments (we can\'t determine the alignment in that case).\n    if (!VD->hasDependentAlignment()) {\n      if (Context.getDeclAlign(VD) > MaxAlignChars) {\n        Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{V,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (VD) {\n    if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n      Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}},
[o]={
[o]={
["clang/test/Sema/tls_alignment.cpp"]={"clang/test/Sema/tls_alignment.cpp:37:44: error: alignment (64) of thread-local variable \'bar\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:40:44: error: alignment (64) of thread-local variable \'bar2\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:43:44: error: alignment (64) of thread-local variable \'bar3\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:46:44: error: alignment (64) of thread-local variable \'bar4\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:49:44: error: alignment (64) of thread-local variable \'bar5\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:65:30: error: alignment (64) of thread-local variable \'blah\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:76:51: error: alignment (64) of thread-local variable \'x\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:75:50: error: alignment (64) of thread-local variable \'b<64>\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:72:20: error: alignment (64) of thread-local variable \'b\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:73:20: error: alignment (64) of thread-local variable \'c\' is greater than the maximum supported alignment (32) for a thread-local variable on this target"}
["clang/test/Sema/tls_alignment.cpp"]={"clang/test/Sema/tls_alignment.cpp:37:44: error: alignment (64) of thread-local variable \'bar\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:40:44: error: alignment (64) of thread-local variable \'bar2\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:43:44: error: alignment (64) of thread-local variable \'bar3\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:46:44: error: alignment (64) of thread-local variable \'bar4\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:49:44: error: alignment (64) of thread-local variable \'bar5\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:65:30: error: alignment (64) of thread-local variable \'blah\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:76:51: error: alignment (64) of thread-local variable \'x\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:75:50: error: alignment (64) of thread-local variable \'b<64>\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:72:20: error: alignment (64) of thread-local variable \'b\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:73:20: error: alignment (64) of thread-local variable \'c\' is greater than the maximum supported alignment (32) for a thread-local variable on this target"}
Line 6,929: Line 6,948:
},
},
["err_too_few_args_in_macro_invoc"]={
["err_too_few_args_in_macro_invoc"]={
[i]="too few arguments provided to function-like macro invocation",
[c]="too few arguments provided to function-like macro invocation",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few arguments provided to function-like macro invocation",
[g]="too few arguments provided to function-like macro invocation",
[g]=n,
[i]=l,
[h]="too few arguments provided to function\\-like macro invocation",
[j]="too few arguments provided to function\\-like macro invocation",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{ob,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n    } else if (!ContainsCodeCompletionTok) {\n      Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{ob,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::r_paren:\n      // The last \')\' has been reached; return the value if one found or\n      // a diagnostic and a dummy value.\n      if (Result) {\n      } else {\n        if (!SuppressDiagnostic)\n          PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}},
[k]={{Fb,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n    } else if (!ContainsCodeCompletionTok) {\n      Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{Fb,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::r_paren:\n      // The last \')\' has been reached; return the value if one found or\n      // a diagnostic and a dummy value.\n      if (Result) {\n      } else {\n        if (!SuppressDiagnostic)\n          PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}},
[o]={
[o]={
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:20:5: error: too few arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:21:6: error: too few arguments provided to function-like macro invocation"}
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:20:5: error: too few arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:21:6: error: too few arguments provided to function-like macro invocation"}
Line 6,944: Line 6,963:
},
},
["err_too_large_for_fixed_point"]={
["err_too_large_for_fixed_point"]={
[i]="this value is too large for this fixed point type",
[c]="this value is too large for this fixed point type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="this value is too large for this fixed point type",
[g]="this value is too large for this fixed point type",
[g]=n,
[i]=l,
[h]="this value is too large for this fixed point type",
[j]="this value is too large for this fixed point type",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"},
[e]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals","[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"},
[k]={{q,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n    if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n    else if (Val.ugt(MaxVal) || Overflowed)\n      Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}},
[k]={{r,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n    if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n    else if (Val.ugt(MaxVal) || Overflowed)\n      Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}},
[o]={
[o]={
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:83:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:84:39: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:85:25: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:86:27: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:87:35: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:88:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:91:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:92:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:93:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:94:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:95:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:96:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:99:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:100:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:101:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:102:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:103:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:104:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:107:12: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:111:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:112:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:113:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:114:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:115:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:116:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:118:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:119:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:120:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:121:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:122:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:123:47: error: this value is too large for this fixed point type"}
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:83:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:84:39: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:85:25: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:86:27: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:87:35: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:88:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:91:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:92:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:93:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:94:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:95:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:96:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:99:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:100:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:101:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:102:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:103:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:104:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:107:12: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:111:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:112:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:113:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:114:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:115:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:116:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:118:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:119:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:120:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:121:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:122:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:123:47: error: this value is too large for this fixed point type"}
Line 6,959: Line 6,978:
},
},
["err_too_many_args_in_macro_invoc"]={
["err_too_many_args_in_macro_invoc"]={
[i]="too many arguments provided to function-like macro invocation",
[c]="too many arguments provided to function-like macro invocation",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many arguments provided to function-like macro invocation",
[g]="too many arguments provided to function-like macro invocation",
[g]=n,
[i]=l,
[h]="too many arguments provided to function\\-like macro invocation",
[j]="too many arguments provided to function\\-like macro invocation",
[b]=a,
[b]=a,
[j]=y,
[h]=z,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{ob,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{ob,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n    Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{ob,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::comma:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}},
[k]={{Fb,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{Fb,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n    Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{Fb,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::comma:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}},
[o]={
[o]={
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:11:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:12:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:16:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:18:8: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:24:9: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:27:5: error: too many arguments provided to function-like macro invocation"}
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:11:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:12:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:16:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:18:8: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:24:9: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:27:5: error: too many arguments provided to function-like macro invocation"}
Line 6,974: Line 6,993:
},
},
["err_toomany_element_decls"]={
["err_toomany_element_decls"]={
[i]="only one element declaration is allowed",
[c]="only one element declaration is allowed",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="only one element declaration is allowed",
[g]="only one element declaration is allowed",
[g]=n,
[i]=l,
[h]="only one element declaration is allowed",
[j]="only one element declaration is allowed",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{N,2296,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      if (!DS->isSingleDecl())\n        return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}},
[k]={{T,2296,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      if (!DS->isSingleDecl())\n        return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}},
[o]={
[o]={
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:28:17: error: only one element declaration is allowed"}
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:28:17: error: only one element declaration is allowed"}
Line 6,989: Line 7,008:
},
},
["err_trailing_requires_clause_on_deduction_guide"]={
["err_trailing_requires_clause_on_deduction_guide"]={
[i]="deduction guide cannot have a requires clause",
[c]="deduction guide cannot have a requires clause",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="deduction guide cannot have a requires clause",
[g]="deduction guide cannot have a requires clause",
[g]=n,
[i]=l,
[h]="deduction guide cannot have a requires clause",
[j]="deduction guide cannot have a requires clause",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[e]={"349636d2bfc3",1575555459,Ob,Ob},
[k]={{u,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n    if (TrailingRequiresClause)\n      SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}},
[k]={{u,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n    if (TrailingRequiresClause)\n      SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}},
[o]={
[o]={
Line 7,004: Line 7,023:
},
},
["err_trailing_return_in_parens"]={
["err_trailing_return_in_parens"]={
[i]="trailing return type may not be nested within parentheses",
[c]="trailing return type may not be nested within parentheses",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="trailing return type may not be nested within parentheses",
[g]="trailing return type may not be nested within parentheses",
[g]=n,
[i]=l,
[h]="trailing return type may not be nested within parentheses",
[j]="trailing return type may not be nested within parentheses",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"},
[e]={"59006e4338ce",1298335013,"Fix a few auto-related issues:","Fix a few auto-related issues:"},
[k]={{G,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n            S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}},
[k]={{K,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n            S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp:6:1: error: trailing return type may not be nested within parentheses"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp:6:1: error: trailing return type may not be nested within parentheses"}
Line 7,019: Line 7,038:
},
},
["err_trailing_return_without_auto"]={
["err_trailing_return_without_auto"]={
[i]="function with trailing return type must specify return type \'auto\', not A",
[c]="function with trailing return type must specify return type \'auto\', not A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="function with trailing return type must specify return type \'auto\', not %0",
[g]="function with trailing return type must specify return type \'auto\', not %0",
[g]=n,
[i]=l,
[h]="function with trailing return type must specify return type \'auto\', not (.*?)",
[j]="function with trailing return type must specify return type \'auto\', not (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[e]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,","Implement the C++0x \"trailing return type\" feature, e.g.,"},
[k]={{G,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n          } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n          } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}},
[k]={{K,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n          } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n          } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:41:7: error: function with trailing return type must specify return type \'auto\', not \'Large auto\'"}
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:41:7: error: function with trailing return type must specify return type \'auto\', not \'Large auto\'"}
Line 7,034: Line 7,053:
},
},
["err_two_right_angle_brackets_need_space"]={
["err_two_right_angle_brackets_need_space"]={
[i]="a space is required between consecutive right angle brackets (use \'> >\')",
[c]="a space is required between consecutive right angle brackets (use \'> >\')",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a space is required between consecutive right angle brackets (use \'> >\')",
[g]="a space is required between consecutive right angle brackets (use \'> >\')",
[g]=n,
[i]=l,
[h]="a space is required between consecutive right angle brackets \\(use \'\\> \\>\'\\)",
[j]="a space is required between consecutive right angle brackets \\(use \'\\> \\>\'\\)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{Cb,1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}},
[k]={{bc,1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:6:8: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:8:12: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:9:5: error: a space is required between consecutive right angle brackets (use \'> >\')"}
["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:6:8: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:8:12: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:9:5: error: a space is required between consecutive right angle brackets (use \'> >\')"}
Line 7,049: Line 7,068:
},
},
["err_type_attribute_wrong_type"]={
["err_type_attribute_wrong_type"]={
[i]="\'A\' only applies to ... types; type here is B",
[c]="\'A\' only applies to ... types; type here is B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
[g]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
[g]=n,
[i]=l,
[h]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
[j]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{G,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n  S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}},
[k]={{K,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n  S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}},
[o]={
[o]={
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:38:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:39:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:41:16: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:42:7: error: \'__arm_streaming\' only applies to function types; type here is \'int *\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:43:7: error: \'__arm_streaming\' only applies to function types; type here is \'int &\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:44:8: error: \'__arm_streaming\' only applies to function types; type here is \'int &&\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:45:20: error: \'__arm_streaming\' only applies to function types; type here is \'int[1]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:43: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:59: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:91:1: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:95:3: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:107:14: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:37: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:53: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:17: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:80: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:96: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:34: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:140:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:141:30: error: \'__arm_streaming\' only applies to function types; type here is \'T\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:162:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:166:30: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:167:41: error: \'__arm_streaming\' only applies to function types; type here is \'struct struct_attr\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:212:15: error: \'__arm_streaming\' only applies to function types; type here is \'void\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:52: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:240:26: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:248:32: error: \'__arm_streaming\' only applies to function types; type here is \'int[5]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:253:7: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:254:13: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:12: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:39: error: \'__arm_streaming\' only applies to function types; type here is \'char\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:266:10: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:273:8: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:283:37: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:285:39: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned long\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:292:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:294:6: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:313:10: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:318:15: error: \'__arm_streaming\' only applies to function types; type here is \'int\'"}
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:38:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:39:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:41:16: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:42:7: error: \'__arm_streaming\' only applies to function types; type here is \'int *\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:43:7: error: \'__arm_streaming\' only applies to function types; type here is \'int &\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:44:8: error: \'__arm_streaming\' only applies to function types; type here is \'int &&\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:45:20: error: \'__arm_streaming\' only applies to function types; type here is \'int[1]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:43: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:59: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:91:1: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:95:3: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:107:14: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:37: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:53: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:17: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:80: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:96: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:34: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:140:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:141:30: error: \'__arm_streaming\' only applies to function types; type here is \'T\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:162:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:166:30: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:167:41: error: \'__arm_streaming\' only applies to function types; type here is \'struct struct_attr\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:212:15: error: \'__arm_streaming\' only applies to function types; type here is \'void\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:52: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:240:26: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:248:32: error: \'__arm_streaming\' only applies to function types; type here is \'int[5]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:253:7: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:254:13: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:12: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:39: error: \'__arm_streaming\' only applies to function types; type here is \'char\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:266:10: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:273:8: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:283:37: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:285:39: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned long\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:292:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:294:6: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:313:10: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:318:15: error: \'__arm_streaming\' only applies to function types; type here is \'int\'"}
Line 7,064: Line 7,083:
},
},
["err_type_available_only_in_default_eval_method"]={
["err_type_available_only_in_default_eval_method"]={
[i]="cannot use type \'A\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[c]="cannot use type \'A\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot use type \'%0\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[g]="cannot use type \'%0\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[g]=n,
[i]=l,
[h]="cannot use type \'(.*?)\' within \'\\#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[j]="cannot use type \'(.*?)\' within \'\\#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{q,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n    if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n      Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}},
[k]={{r,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n    if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n      Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}},
[o]={
[o]={
["clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c"]={ib,gb,ib,gb,ib,gb,ib,gb,ib,gb,ib,gb,ib,gb,ib,gb,ib,gb}
["clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c"]={ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb}
}
}
},
},
["err_type_constraint_missing_arguments"]={
["err_type_constraint_missing_arguments"]={
[i]="A requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[c]="A requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[g]="%0 requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[g]=n,
[i]=l,
[h]="(.*?) requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[j]="(.*?) requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={sb,1576172311,tb},
[e]={Qb,1576172311,cb,cb},
[k]={{r,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}},
[k]={{s,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}},
[o]={
[o]={
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:65:15: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:66:10: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:67:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:68:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:65:15: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:66:10: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:67:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:68:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}
Line 7,094: Line 7,113:
},
},
["err_type_constraint_non_type_concept"]={
["err_type_constraint_non_type_concept"]={
[i]="concept named in type constraint is not a type concept",
[c]="concept named in type constraint is not a type concept",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="concept named in type constraint is not a type concept",
[g]="concept named in type constraint is not a type concept",
[g]=n,
[i]=l,
[h]="concept named in type constraint is not a type concept",
[j]="concept named in type constraint is not a type concept",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={sb,1576172311,tb},
[e]={Qb,1576172311,cb,cb},
[k]={{r,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  // C++2a [temp.param]p4:\n  //    [...] The concept designated by a type-constraint shall be a type\n  //    concept ([temp.concept]).\n  if (!CD->isTypeConcept()) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}},
[k]={{s,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  // C++2a [temp.param]p4:\n  //    [...] The concept designated by a type-constraint shall be a type\n  //    concept ([temp.concept]).\n  if (!CD->isTypeConcept()) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}},
[o]={
[o]={
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:55:15: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:56:10: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:57:3: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:58:3: error: concept named in type constraint is not a type concept"}
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:55:15: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:56:10: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:57:3: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:58:3: error: concept named in type constraint is not a type concept"}
Line 7,109: Line 7,128:
},
},
["err_type_defined_in_alias_template"]={
["err_type_defined_in_alias_template"]={
[i]="A cannot be defined in a type alias template",
[c]="A cannot be defined in a type alias template",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot be defined in a type alias template",
[g]="%0 cannot be defined in a type alias template",
[g]=n,
[i]=l,
[h]="(.*?) cannot be defined in a type alias template",
[j]="(.*?) cannot be defined in a type alias template",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[e]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates."},
[k]={{G,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::AliasTemplate:\n      DiagID = diag::err_type_defined_in_alias_template;"}},
[k]={{K,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::AliasTemplate:\n      DiagID = diag::err_type_defined_in_alias_template;"}},
[o]={
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32: error: \'(unnamed struct at clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32)\' cannot be defined in a type alias template"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32: error: \'(unnamed struct at clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32)\' cannot be defined in a type alias template"}
Line 7,124: Line 7,143:
},
},
["err_type_defined_in_condition"]={
["err_type_defined_in_condition"]={
[i]="A cannot be defined in a condition",
[c]="A cannot be defined in a condition",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot be defined in a condition",
[g]="%0 cannot be defined in a condition",
[g]=n,
[i]=l,
[h]="(.*?) cannot be defined in a condition",
[j]="(.*?) cannot be defined in a condition",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{G,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::Condition:\n      DiagID = diag::err_type_defined_in_condition;"}},
[k]={{K,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::Condition:\n      DiagID = diag::err_type_defined_in_condition;"}},
[o]={
[o]={
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:20:17: error: \'S\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:21:10: error: \'(unnamed struct at clang/test/SemaCXX/condition.cpp:21:10)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:22:11: error: \'(unnamed enum at clang/test/SemaCXX/condition.cpp:22:11)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:64:14: error: \'S\' cannot be defined in a condition"}
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:20:17: error: \'S\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:21:10: error: \'(unnamed struct at clang/test/SemaCXX/condition.cpp:21:10)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:22:11: error: \'(unnamed enum at clang/test/SemaCXX/condition.cpp:22:11)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:64:14: error: \'S\' cannot be defined in a condition"}
Line 7,139: Line 7,158:
},
},
["err_type_defined_in_enum"]={
["err_type_defined_in_enum"]={
[i]="A cannot be defined in an enumeration",
[c]="A cannot be defined in an enumeration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot be defined in an enumeration",
[g]="%0 cannot be defined in an enumeration",
[g]=n,
[i]=l,
[h]="(.*?) cannot be defined in an enumeration",
[j]="(.*?) cannot be defined in an enumeration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration."},
[e]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration.","[Sema] Error out early for tags defined inside an enumeration."},
[k]={{u,17563,"CreateNewDecl:\n  if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n    Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}},
[k]={{u,17563,"CreateNewDecl:\n  if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n    Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}},
[o]={
[o]={
Line 7,154: Line 7,173:
},
},
["err_type_defined_in_for_range"]={
["err_type_defined_in_for_range"]={
[i]="types may not be defined in a for range declaration",
[c]="types may not be defined in a for range declaration",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="types may not be defined in a for range declaration",
[g]="types may not be defined in a for range declaration",
[g]=n,
[i]=l,
[h]="types may not be defined in a for range declaration",
[j]="types may not be defined in a for range declaration",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[e]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).","Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[k]={{N,2504,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (!DS->isSingleDecl()) {\n    Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}},
[k]={{T,2504,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (!DS->isSingleDecl()) {\n    Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}},
[o]={
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:18:8: error: types may not be defined in a for range declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:21:8: error: types may not be defined in a for range declaration"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:18:8: error: types may not be defined in a for range declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:21:8: error: types may not be defined in a for range declaration"}
Line 7,169: Line 7,188:
},
},
["err_type_defined_in_param_type"]={
["err_type_defined_in_param_type"]={
[i]="A cannot be defined in a parameter type",
[c]="A cannot be defined in a parameter type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot be defined in a parameter type",
[g]="%0 cannot be defined in a parameter type",
[g]=n,
[i]=l,
[h]="(.*?) cannot be defined in a parameter type",
[j]="(.*?) cannot be defined in a parameter type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[e]={"d6ab8744dc68",1243553519,Pb,Pb},
[k]={{u,17629,"CreateNewDecl:\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n      // C++ [dcl.fct]p6:\n      //  Types shall not be defined in return or parameter types.\n      if (TUK == TUK_Definition && !IsTypeSpecifier) {\n        Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{G,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::RequiresExpr:\n      DiagID = diag::err_type_defined_in_param_type;"}},
[k]={{u,17629,"CreateNewDecl:\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n      // C++ [dcl.fct]p6:\n      //  Types shall not be defined in return or parameter types.\n      if (TUK == TUK_Definition && !IsTypeSpecifier) {\n        Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{K,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::RequiresExpr:\n      DiagID = diag::err_type_defined_in_param_type;"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:4:7: error: (null) cannot be defined in a parameter type","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:5:11: error: (null) cannot be defined in a parameter type"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:4:7: error: (null) cannot be defined in a parameter type","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:5:11: error: (null) cannot be defined in a parameter type"}
Line 7,184: Line 7,203:
},
},
["err_type_defined_in_result_type"]={
["err_type_defined_in_result_type"]={
[i]="A cannot be defined in the result type of a function",
[c]="A cannot be defined in the result type of a function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot be defined in the result type of a function",
[g]="%0 cannot be defined in the result type of a function",
[g]=n,
[i]=l,
[h]="(.*?) cannot be defined in the result type of a function",
[j]="(.*?) cannot be defined in the result type of a function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[e]={"d6ab8744dc68",1243553519,Pb,Pb},
[k]={{G,5411,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n        S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}},
[k]={{K,5411,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n        S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1: error: \'(unnamed enum at clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1)\' cannot be defined in the result type of a function"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1: error: \'(unnamed enum at clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1)\' cannot be defined in the result type of a function"}
Line 7,199: Line 7,218:
},
},
["err_type_defined_in_type_specifier"]={
["err_type_defined_in_type_specifier"]={
[i]="A cannot be defined in a type specifier",
[c]="A cannot be defined in a type specifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 cannot be defined in a type specifier",
[g]="%0 cannot be defined in a type specifier",
[g]=n,
[i]=l,
[h]="(.*?) cannot be defined in a type specifier",
[j]="(.*?) cannot be defined in a type specifier",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[e]={"d6ab8744dc68",1243553519,Pb,Pb},
[k]={{u,17556,"CreateNewDecl:\n  // C++11 [dcl.type]p3:\n  //  A type-specifier-seq shall not define a class or enumeration [...].\n  if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n    Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{G,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::Association:\n      DiagID = diag::err_type_defined_in_type_specifier;"}},
[k]={{u,17556,"CreateNewDecl:\n  // C++11 [dcl.type]p3:\n  //  A type-specifier-seq shall not define a class or enumeration [...].\n  if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n    Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{K,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::Association:\n      DiagID = diag::err_type_defined_in_type_specifier;"}},
[o]={
[o]={
["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"}
["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"}
Line 7,214: Line 7,233:
},
},
["err_type_mismatch_continuation_class"]={
["err_type_mismatch_continuation_class"]={
[i]="type of property A in class extension does not match property type in primary class",
[c]="type of property A in class extension does not match property type in primary class",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type of property %0 in class extension does not match property type in primary class",
[g]="type of property %0 in class extension does not match property type in primary class",
[g]=n,
[i]=l,
[h]="type of property (.*?) in class extension does not match property type in primary class",
[j]="type of property (.*?) in class extension does not match property type in primary class",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "},
[e]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in ","objc: turn warning for property type mismatch in "},
[k]={{S,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}},
[k]={{W,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}},
[o]={
[o]={
["clang/test/SemaObjC/continuation-class-property.m"]={"clang/test/SemaObjC/continuation-class-property.m:41:1: error: type of property \'NSString *\' in class extension does not match property type in primary class","clang/test/SemaObjC/continuation-class-property.m:42:1: error: type of property \'NSRect\' in class extension does not match property type in primary class"}
["clang/test/SemaObjC/continuation-class-property.m"]={"clang/test/SemaObjC/continuation-class-property.m:41:1: error: type of property \'NSString *\' in class extension does not match property type in primary class","clang/test/SemaObjC/continuation-class-property.m:42:1: error: type of property \'NSRect\' in class extension does not match property type in primary class"}
Line 7,229: Line 7,248:
},
},
["err_type_pack_element_out_of_bounds"]={
["err_type_pack_element_out_of_bounds"]={
[i]="a parameter pack may not be accessed at an out of bounds index",
[c]="a parameter pack may not be accessed at an out of bounds index",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="a parameter pack may not be accessed at an out of bounds index",
[g]="a parameter pack may not be accessed at an out of bounds index",
[g]=n,
[i]=l,
[h]="a parameter pack may not be accessed at an out of bounds index",
[j]="a parameter pack may not be accessed at an out of bounds index",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."},
[e]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.","[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."},
[k]={{r,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  case BTK__type_pack_element:\n    // If the Index is out of bounds, the program is ill-formed.\n    if (Index >= Ts.pack_size()) {\n      SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}},
[k]={{s,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  case BTK__type_pack_element:\n    // If the Index is out of bounds, the program is ill-formed.\n    if (Index >= Ts.pack_size()) {\n      SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}},
[o]={
[o]={
["clang/test/SemaCXX/type_pack_element.cpp"]={"clang/test/SemaCXX/type_pack_element.cpp:44:51: error: a parameter pack may not be accessed at an out of bounds index"}
["clang/test/SemaCXX/type_pack_element.cpp"]={"clang/test/SemaCXX/type_pack_element.cpp:44:51: error: a parameter pack may not be accessed at an out of bounds index"}
Line 7,244: Line 7,263:
},
},
["err_type_safety_unknown_flag"]={
["err_type_safety_unknown_flag"]={
[i]="invalid comparison flag A; use \'layout_compatible\' or \'must_be_null\'",
[c]="invalid comparison flag A; use \'layout_compatible\' or \'must_be_null\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid comparison flag %0; use \'layout_compatible\' or \'must_be_null\'",
[g]="invalid comparison flag %0; use \'layout_compatible\' or \'must_be_null\'",
[g]=n,
[i]=l,
[h]="invalid comparison flag (.*?); use \'layout_compatible\' or \'must_be_null\'",
[j]="invalid comparison flag (.*?); use \'layout_compatible\' or \'must_be_null\'",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[e]={"e4a5a90e8d6b",1345162118,Rb,Rb},
[k]={{T,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  while (TryConsumeToken(tok::comma)) {\n    if (Flag->isStr(\"layout_compatible\"))\n    else if (Flag->isStr(\"must_be_null\"))\n    else {\n      Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}},
[k]={{Y,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  while (TryConsumeToken(tok::comma)) {\n    if (Flag->isStr(\"layout_compatible\"))\n    else if (Flag->isStr(\"must_be_null\"))\n    else {\n      Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}},
[o]={
[o]={
["clang/test/Sema/attr-type-safety.c"]={"clang/test/Sema/attr-type-safety.c:15:72: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'","clang/test/Sema/attr-type-safety.c:17:90: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'"}
["clang/test/Sema/attr-type-safety.c"]={"clang/test/Sema/attr-type-safety.c:15:72: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'","clang/test/Sema/attr-type-safety.c:17:90: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'"}
Line 7,259: Line 7,278:
},
},
["err_type_tag_for_datatype_not_ice"]={
["err_type_tag_for_datatype_not_ice"]={
[i]="\'type_tag_for_datatype\' attribute requires the initializer to be an ... constant expression",
[c]="\'type_tag_for_datatype\' attribute requires the initializer to be an ... constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression",
[g]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression",
[g]=n,
[i]=l,
[h]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression",
[j]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[e]={"e4a5a90e8d6b",1345162118,Rb,Rb},
[k]={{u,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}},
[k]={{u,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}},
[o]={
[o]={
Line 7,274: Line 7,293:
},
},
["err_type_tag_for_datatype_too_large"]={
["err_type_tag_for_datatype_too_large"]={
[i]="\'type_tag_for_datatype\' attribute requires the initializer to be an ... constant expression that can be represented by a 64 bit integer",
[c]="\'type_tag_for_datatype\' attribute requires the initializer to be an ... constant expression that can be represented by a 64 bit integer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression that can be represented by a 64 bit integer",
[g]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression that can be represented by a 64 bit integer",
[g]=n,
[i]=l,
[h]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression that can be represented by a 64 bit integer",
[j]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression that can be represented by a 64 bit integer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[e]={"e4a5a90e8d6b",1345162118,Rb,Rb},
[k]={{u,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    if (MagicValueInt->getActiveBits() > 64) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_too_large) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}
[k]={{u,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    if (MagicValueInt->getActiveBits() > 64) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_too_large) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}
},
},
["err_type_trait_arity"]={
["err_type_trait_arity"]={
[i]="type trait requires A... argument...; have B argumentC",
[c]="type trait requires A... argument...; have B argumentC",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3",
[g]="type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3",
[g]=n,
[i]=l,
[h]="type trait requires (.*?)(?:| or more) argument(?:|s); have (.*?) argument(.*?)",
[j]="type trait requires (.*?)(?:| or more) argument(?:|s); have (.*?) argument(.*?)",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)"},
[e]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)","Implement a new type trait __is_trivially_constructible(T, Args...)"},
[k]={{F,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (Arity && N != Arity) {\n    Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{F,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (!Arity && N == 0) {\n    Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}},
[k]={{J,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (Arity && N != Arity) {\n    Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{J,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (!Arity && N == 0) {\n    Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}},
[o]={
[o]={
["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:5:32: error: type trait requires 1 or more arguments; have 0 arguments"}
["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:5:32: error: type trait requires 1 or more arguments; have 0 arguments"}
Line 7,301: Line 7,320:
},
},
["err_type_unsupported"]={
["err_type_unsupported"]={
[i]="A is not supported on this target",
[c]="A is not supported on this target",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 is not supported on this target",
[g]="%0 is not supported on this target",
[g]=n,
[i]=l,
[h]="(.*?) is not supported on this target",
[j]="(.*?) is not supported on this target",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"},
[e]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang","Enable support for __float128 in Clang"},
[k]={{G,1447,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_bitint: {\n    if (!S.Context.getTargetInfo().hasBitIntType())\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{G,1507,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int128:\n    if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{G,1520,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float16:\n    // CUDA host and device may have different _Float16 support, therefore\n    // do not diagnose _Float16 usage to avoid false alarm.\n    // ToDo: more precise diagnostics for CUDA.\n    if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{G,1529,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_BFloat16:\n    if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{G,1553,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float128:\n    if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{G,1561,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_ibm128:\n    if (!S.Context.getTargetInfo().hasIbm128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__ibm128\";"}}
[k]={{K,1447,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_bitint: {\n    if (!S.Context.getTargetInfo().hasBitIntType())\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{K,1507,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int128:\n    if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{K,1520,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float16:\n    // CUDA host and device may have different _Float16 support, therefore\n    // do not diagnose _Float16 usage to avoid false alarm.\n    // ToDo: more precise diagnostics for CUDA.\n    if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{K,1529,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_BFloat16:\n    if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{K,1553,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float128:\n    if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{K,1561,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_ibm128:\n    if (!S.Context.getTargetInfo().hasIbm128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__ibm128\";"}}
},
},
["err_typecheck_address_of"]={
["err_typecheck_address_of"]={
[i]="address of ... requested",
[c]="address of ... requested",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="address of %select{bit-field|vector element|property expression|register variable|matrix element}0 requested",
[g]="address of %select{bit-field|vector element|property expression|register variable|matrix element}0 requested",
[g]=n,
[i]=l,
[h]="address of (?:bit\\-field|vector element|property expression|register variable|matrix element) requested",
[j]="address of (?:bit\\-field|vector element|property expression|register variable|matrix element) requested",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{mb,688,"#endif\n  if (Kind == CK_ArrayToPointerDecay) {\n    // C17 6.7.1p6 footnote 124: The implementation can treat any register\n    // declaration simply as an auto declaration. However, whether or not\n    // addressable storage is actually used, the address of any part of an\n    // object declared with storage-class specifier register cannot be\n    // computed, either explicitly(by use of the unary & operator as discussed\n    // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n    // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n    // array declared with storage-class specifier register is sizeof.\n    if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n      if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n        if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n          if (VD->getStorageClass() == SC_Register) {\n            Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{q,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}},
[k]={{yb,688,"#endif\n  if (Kind == CK_ArrayToPointerDecay) {\n    // C17 6.7.1p6 footnote 124: The implementation can treat any register\n    // declaration simply as an auto declaration. However, whether or not\n    // addressable storage is actually used, the address of any part of an\n    // object declared with storage-class specifier register cannot be\n    // computed, either explicitly(by use of the unary & operator as discussed\n    // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n    // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n    // array declared with storage-class specifier register is sizeof.\n    if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n      if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n        if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n          if (VD->getStorageClass() == SC_Register) {\n            Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{r,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}},
[o]={
[o]={
["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"}
["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"}
Line 7,328: Line 7,347:
},
},
["err_typecheck_addrof_dtor"]={
["err_typecheck_addrof_dtor"]={
[i]="taking the address of a destructor",
[c]="taking the address of a destructor",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="taking the address of a destructor",
[g]="taking the address of a destructor",
[g]=n,
[i]=l,
[h]="taking the address of a destructor",
[j]="taking the address of a destructor",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."},
[e]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.","Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."},
[k]={{q,14994,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n    // Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n    if (isa<CXXDestructorDecl>(MD))\n      Diag(OpLoc, diag::err_typecheck_addrof_dtor) << op->getSourceRange();"}}
[k]={{r,14994,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n    // Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n    if (isa<CXXDestructorDecl>(MD))\n      Diag(OpLoc, diag::err_typecheck_addrof_dtor) << op->getSourceRange();"}}
},
},
["err_typecheck_addrof_temporary"]={
["err_typecheck_addrof_temporary"]={
[i]="taking the address of a temporary object of type A",
[c]="taking the address of a temporary object of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="taking the address of a temporary object of type %0",
[g]="taking the address of a temporary object of type %0",
[g]=n,
[i]=l,
[h]="taking the address of a temporary object of type (.*?)",
[j]="taking the address of a temporary object of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[e]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function"},
[k]={{q,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n    Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}
[k]={{r,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n    Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}
},
},
["err_typecheck_ambiguous_condition"]={
["err_typecheck_ambiguous_condition"]={
[i]="conversion from A to B is ambiguous",
[c]="conversion from A to B is ambiguous",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="conversion %diff{from $ to $|between types}0,1 is ambiguous",
[g]="conversion %diff{from $ to $|between types}0,1 is ambiguous",
[g]=n,
[i]=l,
[h]="conversion (?:from (.*?) to (.*?)|between types) is ambiguous",
[j]="conversion (?:from (.*?) to (.*?)|between types) is ambiguous",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."},
[e]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails.","Issue good ambiguity diagnostic when convesion fails."},
[k]={{F,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ImplicitConversionSequence::AmbiguousConversion:\n    ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{E,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\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);"},{db,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n    Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}},
[k]={{J,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ImplicitConversionSequence::AmbiguousConversion:\n    ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{M,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\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);"},{gb,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n    Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:19:15: error: conversion from \'U\' to \'bool\' is ambiguous"}
["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:19:15: error: conversion from \'U\' to \'bool\' is ambiguous"}
Line 7,367: Line 7,386:
},
},
["err_typecheck_arc_assign_externally_retained"]={
["err_typecheck_arc_assign_externally_retained"]={
[i]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[c]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[g]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[g]=n,
[i]=l,
[h]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[j]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[b]=a,
[b]=a,
[j]="ARC Semantic Issue",
[h]="ARC Semantic Issue",
[c]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[e]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained"},
[k]={{q,14313,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n            DiagID = diag::err_typecheck_arc_assign_externally_retained;"}},
[k]={{r,14313,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n            DiagID = diag::err_typecheck_arc_assign_externally_retained;"}},
[o]={
[o]={
["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:18:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:19:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:20:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:26:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:36:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:45:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:51:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:61:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:68:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:74:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:81:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:85:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:91:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:95:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:103:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:107:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:114:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC"}
["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:18:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:19:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:20:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:26:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:36:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:45:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:51:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:61:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:68:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:74:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:81:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:85:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:91:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:95:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:103:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:107:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:114:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC"}
Line 7,382: Line 7,401:
},
},
["err_typecheck_arc_assign_self"]={
["err_typecheck_arc_assign_self"]={
[i]="cannot assign to \'self\' outside of a method in the init family",
[c]="cannot assign to \'self\' outside of a method in the init family",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot assign to \'self\' outside of a method in the init family",
[g]="cannot assign to \'self\' outside of a method in the init family",
[g]=n,
[i]=l,
[h]="cannot assign to \'self\' outside of a method in the init family",
[j]="cannot assign to \'self\' outside of a method in the init family",
[b]=a,
[b]=a,
[j]="ARC Semantic Issue",
[h]="ARC Semantic Issue",
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[e]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[k]={{q,14309,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n            DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}},
[k]={{r,14309,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n            DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}},
[o]={
[o]={
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:142:8: error: cannot assign to \'self\' outside of a method in the init family"}
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:142:8: error: cannot assign to \'self\' outside of a method in the init family"}
Line 7,397: Line 7,416:
},
},
["err_typecheck_arc_assign_self_class_method"]={
["err_typecheck_arc_assign_self_class_method"]={
[i]="cannot assign to \'self\' in a class method",
[c]="cannot assign to \'self\' in a class method",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot assign to \'self\' in a class method",
[g]="cannot assign to \'self\' in a class method",
[g]=n,
[i]=l,
[h]="cannot assign to \'self\' in a class method",
[j]="cannot assign to \'self\' in a class method",
[b]=a,
[b]=a,
[j]="ARC Semantic Issue",
[h]="ARC Semantic Issue",
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[e]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[k]={{q,14304,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n            DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}
[k]={{r,14304,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n            DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}
},
},
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
[i]="arithmetic on a pointer to ... type A",
[c]="arithmetic on a pointer to ... type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="arithmetic on a pointer to %select{an incomplete|sizeless}0 type %1",
[g]="arithmetic on a pointer to %select{an incomplete|sizeless}0 type %1",
[g]=n,
[i]=l,
[h]="arithmetic on a pointer to (?:an incomplete|sizeless) type (.*?)",
[j]="arithmetic on a pointer to (?:an incomplete|sizeless) type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n  return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}},
[k]={{r,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n  return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}},
[o]={
[o]={
["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:74:12: error: arithmetic on a pointer to an incomplete type \'struct A\'","clang/test/Sema/empty1.c:82:12: error: arithmetic on a pointer to an incomplete type \'struct emp_1[]\'"}
["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:74:12: error: arithmetic on a pointer to an incomplete type \'struct A\'","clang/test/Sema/empty1.c:82:12: error: arithmetic on a pointer to an incomplete type \'struct emp_1[]\'"}
Line 7,424: Line 7,443:
},
},
["err_typecheck_arr_assign_enumeration"]={
["err_typecheck_arr_assign_enumeration"]={
[i]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[c]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[g]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[g]=n,
[i]=l,
[h]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[j]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[b]=a,
[b]=a,
[j]="ARC Semantic Issue",
[h]="ARC Semantic Issue",
[c]={"31168b077c36",1308178962,"Automatic Reference Counting."},
[e]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting."},
[k]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n  bool VisitBinaryOperator(BinaryOperator *Exp) {\n    if (declRef && isa<VarDecl>(declRef->getDecl())) {\n      if (var->isARCPseudoStrong()) {\n        if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{q,14343,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n          } else {\n            DiagID = diag::err_typecheck_arr_assign_enumeration;"}},
[k]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n  bool VisitBinaryOperator(BinaryOperator *Exp) {\n    if (declRef && isa<VarDecl>(declRef->getDecl())) {\n      if (var->isARCPseudoStrong()) {\n        if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{r,14343,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n          } else {\n            DiagID = diag::err_typecheck_arr_assign_enumeration;"}},
[o]={
[o]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:306:7: error: fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this"}
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:306:7: error: fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this"}
Line 7,439: Line 7,458:
},
},
["err_typecheck_array_not_modifiable_lvalue"]={
["err_typecheck_array_not_modifiable_lvalue"]={
[i]="array type A is not assignable",
[c]="array type A is not assignable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="array type %0 is not assignable",
[g]="array type %0 is not assignable",
[g]=n,
[i]=l,
[h]="array type (.*?) is not assignable",
[j]="array type (.*?) is not assignable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14347,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ArrayTemporary:\n    DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}}
[k]={{r,14347,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ArrayTemporary:\n    DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}}
},
},
["err_typecheck_assign_const"]={
["err_typecheck_assign_const"]={
[i]="...",
[c]="...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|cannot assign to %select{variable %2|non-static data member %2|lvalue}1 with %select{|nested }3const-qualified data member %4|read-only variable is not assignable}0",
[g]="%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|cannot assign to %select{variable %2|non-static data member %2|lvalue}1 with %select{|nested }3const-qualified data member %4|read-only variable is not assignable}0",
[g]=n,
[i]=l,
[h]="(?:cannot assign to return value because function (.*?) returns a const value|cannot assign to variable (.*?) with const\\-qualified type (.*?)|cannot assign to (?:non\\-|)static data member (.*?) with const\\-qualified type (.*?)|cannot assign to non\\-static data member within const member function (.*?)|cannot assign to (?:variable (.*?)|non\\-static data member (.*?)|lvalue) with (?:|nested )const\\-qualified data member (.*?)|read\\-only variable is not assignable)",
[j]="(?:cannot assign to return value because function (.*?) returns a const value|cannot assign to variable (.*?) with const\\-qualified type (.*?)|cannot assign to (?:non\\-|)static data member (.*?) with const\\-qualified type (.*?)|cannot assign to non\\-static data member within const member function (.*?)|cannot assign to (?:variable (.*?)|non\\-static data member (.*?)|lvalue) with (?:|nested )const\\-qualified data member (.*?)|read\\-only variable is not assignable)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{q,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{q,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      if (!DiagnosticEmitted) {\n        S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{q,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{q,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{q,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{q,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      if (FieldTy.isConstQualified()) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}},
[k]={{r,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{r,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{r,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      if (!DiagnosticEmitted) {\n        S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{r,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{r,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{r,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{r,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      if (FieldTy.isConstQualified()) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}},
[o]={
[o]={
["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:7:5: error: cannot assign to variable \'x\' with const-qualified type \'const int\'"}
["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:7:5: error: cannot assign to variable \'x\' with const-qualified type \'const int\'"}
Line 7,466: Line 7,485:
},
},
["err_typecheck_bool_condition"]={
["err_typecheck_bool_condition"]={
[i]="value of type A is not contextually convertible to \'bool\'",
[c]="value of type A is not contextually convertible to \'bool\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="value of type %0 is not contextually convertible to \'bool\'",
[g]="value of type %0 is not contextually convertible to \'bool\'",
[g]=n,
[i]=l,
[h]="value of type (.*?) is not contextually convertible to \'bool\'",
[j]="value of type (.*?) is not contextually convertible to \'bool\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{db,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n    return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}},
[k]={{gb,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n    return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}},
[o]={
[o]={
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:38:12: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:49:15: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:60:15: error: value of type \'Na\' is not contextually convertible to \'bool\'"}
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:38:12: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:49:15: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:60:15: error: value of type \'Na\' is not contextually convertible to \'bool\'"}
Line 7,481: Line 7,500:
},
},
["err_typecheck_call_different_arg_types"]={
["err_typecheck_call_different_arg_types"]={
[i]="arguments are of different types (A vs B)",
[c]="arguments are of different types (A vs B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="arguments are of different types%diff{ ($ vs $)|}0,1",
[g]="arguments are of different types%diff{ ($ vs $)|}0,1",
[g]=n,
[i]=l,
[h]="arguments are of different types(?: \\((.*?) vs (.*?)\\)|)",
[j]="arguments are of different types(?: \\((.*?) vs (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,2724,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_elementwise_copysign: {\n    if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n      return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{w,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n    return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{w,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n  if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n    return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{w,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n  for (int I = 1; I < 3; ++I) {\n    if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n      return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}},
[k]={{w,2724,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_elementwise_copysign: {\n    if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n      return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{w,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n    return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{w,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n  if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n    return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{w,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n  for (int I = 1; I < 3; ++I) {\n    if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n      return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}},
[o]={
[o]={
Line 7,496: Line 7,515:
},
},
["err_typecheck_call_invalid_ordered_compare"]={
["err_typecheck_call_invalid_ordered_compare"]={
[i]="ordered compare requires two args of floating point type (A and B)",
[c]="ordered compare requires two args of floating point type (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1",
[g]="ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1",
[g]=n,
[i]=l,
[h]="ordered compare requires two args of floating point type(?: \\((.*?) and (.*?)\\)|)",
[j]="ordered compare requires two args of floating point type(?: \\((.*?) and (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends.  This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n  // If the common type isn\'t a real floating type, then the arguments were\n  // invalid for this operation.\n  if (Res.isNull() || !Res->isRealFloatingType())\n    return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}},
[k]={{w,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends.  This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n  // If the common type isn\'t a real floating type, then the arguments were\n  // invalid for this operation.\n  if (Res.isNull() || !Res->isRealFloatingType())\n    return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}},
[o]={
[o]={
Line 7,511: Line 7,530:
},
},
["err_typecheck_call_invalid_unary_fp"]={
["err_typecheck_call_invalid_unary_fp"]={
[i]="floating point classification requires argument of floating point type (passed in A)",
[c]="floating point classification requires argument of floating point type (passed in A)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="floating point classification requires argument of floating point type (passed in %0)",
[g]="floating point classification requires argument of floating point type (passed in %0)",
[g]=n,
[i]=l,
[h]="floating point classification requires argument of floating point type \\(passed in (.*?)\\)",
[j]="floating point classification requires argument of floating point type \\(passed in (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they "},
[e]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they ","PR4836, part 1: add Sema support for __builtin_isnan and friends; they "},
[k]={{w,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends.  This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n  // This operation requires a non-_Complex floating-point number.\n  if (!OrigArg->getType()->isRealFloatingType())\n    return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}},
[k]={{w,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends.  This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n  // This operation requires a non-_Complex floating-point number.\n  if (!OrigArg->getType()->isRealFloatingType())\n    return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}},
[o]={
[o]={
Line 7,526: Line 7,545:
},
},
["err_typecheck_call_not_function"]={
["err_typecheck_call_not_function"]={
[i]="called object type A is not a function or function pointer",
[c]="called object type A is not a function or function pointer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="called object type %0 is not a function or function pointer",
[g]="called object type %0 is not a function or function pointer",
[g]=n,
[i]=l,
[h]="called object type (.*?) is not a function or function pointer",
[j]="called object type (.*?) is not a function or function pointer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,7417,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n      if (!FuncT)\n        return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{q,7483,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n    } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n    } else {\n      return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}},
[k]={{r,7417,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n      if (!FuncT)\n        return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{r,7483,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n    } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n    } else {\n      return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}},
[o]={
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:17:10: error: called object type \'test0::Test::E\' is not a function or function pointer"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:17:10: error: called object type \'test0::Test::E\' is not a function or function pointer"}
Line 7,541: Line 7,560:
},
},
["err_typecheck_call_requires_real_fp"]={
["err_typecheck_call_requires_real_fp"]={
[i]="argument type A is not a real floating point type",
[c]="argument type A is not a real floating point type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="argument type %0 is not a real floating point type",
[g]="argument type %0 is not a real floating point type",
[g]=n,
[i]=l,
[h]="argument type (.*?) is not a real floating point type",
[j]="argument type (.*?) is not a real floating point type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={U,1582847864,V},
[e]={ab,1582847864,I,I},
[k]={{w,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  for (unsigned I = 0; I != 2; ++I) {\n    // Despite supporting _Complex int, GCC requires a real floating point type\n    // for the operands of __builtin_complex.\n    if (!T->isRealFloatingType()) {\n      return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}},
[k]={{w,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  for (unsigned I = 0; I != 2; ++I) {\n    // Despite supporting _Complex int, GCC requires a real floating point type\n    // for the operands of __builtin_complex.\n    if (!T->isRealFloatingType()) {\n      return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}},
[o]={
[o]={
Line 7,556: Line 7,575:
},
},
["err_typecheck_call_too_few_args"]={
["err_typecheck_call_too_few_args"]={
[i]="too few ...arguments to ... call, expected A, have B",
[c]="too few ...arguments to ... call, expected A, have B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[g]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[g]=n,
[i]=l,
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[j]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{w,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n    Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs < NumRequiredArgs) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{q,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{fb,1803,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // FIXME. This need be cleaned up.\n  if (Args.size() < NumNamedArgs) {\n    Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}},
[k]={{w,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{w,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n    Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs < NumRequiredArgs) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{r,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{pb,1803,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // FIXME. This need be cleaned up.\n  if (Args.size() < NumNamedArgs) {\n    Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}},
[o]={
[o]={
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:10:25: error: too few arguments to function call, expected 1, have 0","clang/test/Sema/builtin-unary-fp.c:15:43: error: too few arguments to function call, expected 6, have 5"}
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:10:25: error: too few arguments to function call, expected 1, have 0","clang/test/Sema/builtin-unary-fp.c:15:43: error: too few arguments to function call, expected 6, have 5"}
Line 7,571: Line 7,590:
},
},
["err_typecheck_call_too_few_args_at_least"]={
["err_typecheck_call_too_few_args_at_least"]={
[i]="too few ...arguments to ... call, expected at least A, have B",
[c]="too few ...arguments to ... call, expected at least A, have B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2",
[g]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2",
[g]=n,
[i]=l,
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?)",
[j]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number"},
[e]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number","Expand argument diagnostic for too few arguments to give the number"},
[k]={{w,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // We need at least one argument.\n  if (TheCall->getNumArgs() < 1) {\n    S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{w,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  if (NumArgs < 4) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{w,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Ensure that we have at least one argument to do type inference from.\n  if (TheCall->getNumArgs() < 1) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Now that we know how many fixed arguments we expect, first check that we\n  // have at least that many.\n  if (TheCall->getNumArgs() < 1 + NumFixed) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Call->getNumArgs() < 3)\n    return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{w,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() < 2)\n    return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{q,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}},
[k]={{w,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // We need at least one argument.\n  if (TheCall->getNumArgs() < 1) {\n    S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{w,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  if (NumArgs < 4) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{w,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Ensure that we have at least one argument to do type inference from.\n  if (TheCall->getNumArgs() < 1) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Now that we know how many fixed arguments we expect, first check that we\n  // have at least that many.\n  if (TheCall->getNumArgs() < 1 + NumFixed) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Call->getNumArgs() < 3)\n    return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{w,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() < 2)\n    return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{r,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:182:12: error: too few arguments to function call, expected at least 2, have 0"}
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:182:12: error: too few arguments to function call, expected at least 2, have 0"}
Line 7,586: Line 7,605:
},
},
["err_typecheck_call_too_few_args_at_least_one"]={
["err_typecheck_call_too_few_args_at_least_one"]={
[i]="too few ...arguments to ... call, at least argument A must be specified",
[c]="too few ...arguments to ... call, at least argument A must be specified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified",
[g]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified",
[g]=n,
[i]=l,
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, at least argument (.*?) must be specified",
[j]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, at least argument (.*?) must be specified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[e]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function"},
[k]={{q,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
[k]={{r,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:181:12: error: too few arguments to function call, at least argument \'a\' must be specified"}
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:181:12: error: too few arguments to function call, at least argument \'a\' must be specified"}
Line 7,601: Line 7,620:
},
},
["err_typecheck_call_too_few_args_at_least_suggest"]={
["err_typecheck_call_too_few_args_at_least_suggest"]={
[i]="too few ...arguments to ... call, expected at least A, have B; did you mean C?",
[c]="too few ...arguments to ... call, expected at least A, have B; did you mean C?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2; did you mean %3?",
[g]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2; did you mean %3?",
[g]=n,
[i]=l,
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?); did you mean (.*?)\\?",
[j]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?); did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[e]={"476c823ec8fd",1373325224,xb,xb},
[k]={{q,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}
[k]={{r,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}
},
},
["err_typecheck_call_too_few_args_one"]={
["err_typecheck_call_too_few_args_one"]={
[i]="too few ...arguments to ... call, single argument A was not specified",
[c]="too few ...arguments to ... call, single argument A was not specified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified",
[g]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified",
[g]=n,
[i]=l,
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, single argument (.*?) was not specified",
[j]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, single argument (.*?) was not specified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[e]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function"},
[k]={{q,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
[k]={{r,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:177:12: error: too few arguments to function call, single argument \'a\' was not specified"}
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:177:12: error: too few arguments to function call, single argument \'a\' was not specified"}
Line 7,628: Line 7,647:
},
},
["err_typecheck_call_too_few_args_suggest"]={
["err_typecheck_call_too_few_args_suggest"]={
[i]="too few ...arguments to ... call, expected A, have B; did you mean C?",
[c]="too few ...arguments to ... call, expected A, have B; did you mean C?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[g]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[g]=n,
[i]=l,
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[j]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[e]={"476c823ec8fd",1373325224,xb,xb},
[k]={{q,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}},
[k]={{r,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}},
[o]={
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp:15:7: error: too few arguments to function call, expected 1, have 0; did you mean \'A::f\'?"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp:15:7: error: too few arguments to function call, expected 1, have 0; did you mean \'A::f\'?"}
Line 7,643: Line 7,662:
},
},
["err_typecheck_call_too_many_args"]={
["err_typecheck_call_too_many_args"]={
[i]="too many ...arguments to ... call, expected A, have B",
[c]="too many ...arguments to ... call, expected A, have B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[g]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[g]=n,
[i]=l,
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[j]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking.  Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n  return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{w,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n  } else if (Args.size() > AdjustedNumArgs) {\n    Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() != 0) {\n    Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{q,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{fb,1900,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // Promote additional arguments to variadic methods.\n  if (Method->isVariadic()) {\n  } else {\n    // Check for extra arguments to non-variadic methods.\n    if (Args.size() != NumNamedArgs) {\n      Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}},
[k]={{w,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking.  Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n  return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{w,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n  } else if (Args.size() > AdjustedNumArgs) {\n    Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() != 0) {\n    Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{r,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{pb,1900,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // Promote additional arguments to variadic methods.\n  if (Method->isVariadic()) {\n  } else {\n    // Check for extra arguments to non-variadic methods.\n    if (Args.size() != NumNamedArgs) {\n      Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}},
[o]={
[o]={
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:11:27: error: too many arguments to function call, expected 1, have 2","clang/test/Sema/builtin-unary-fp.c:16:48: error: too many arguments to function call, expected 6, have 7"}
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:11:27: error: too many arguments to function call, expected 1, have 2","clang/test/Sema/builtin-unary-fp.c:16:48: error: too many arguments to function call, expected 6, have 7"}
Line 7,658: Line 7,677:
},
},
["err_typecheck_call_too_many_args_at_most"]={
["err_typecheck_call_too_many_args_at_most"]={
[i]="too many ...arguments to ... call, expected at most A, have B",
[c]="too many ...arguments to ... call, expected at most A, have B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2",
[g]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2",
[g]=n,
[i]=l,
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?)",
[j]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give"},
[e]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give","Expand the argument diagnostics for too many arguments and give"},
[k]={{w,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{w,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n  if (NumArgs > 3)\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{w,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs >= NumRequiredArgs + 0x100) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{q,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[k]={{w,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{w,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n  if (NumArgs > 3)\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{w,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs >= NumRequiredArgs + 0x100) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{r,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[o]={
[o]={
["clang/test/Sema/builtin-prefetch.c"]={"clang/test/Sema/builtin-prefetch.c:8:33: error: too many arguments to function call, expected at most 3, have 4"}
["clang/test/Sema/builtin-prefetch.c"]={"clang/test/Sema/builtin-prefetch.c:8:33: error: too many arguments to function call, expected at most 3, have 4"}
Line 7,673: Line 7,692:
},
},
["err_typecheck_call_too_many_args_at_most_one"]={
["err_typecheck_call_too_many_args_at_most_one"]={
[i]="too many ...arguments to ... call, expected at most single argument A, have B arguments",
[c]="too many ...arguments to ... call, expected at most single argument A, have B arguments",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most single argument %1, have %2 arguments",
[g]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most single argument %1, have %2 arguments",
[g]=n,
[i]=l,
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most single argument (.*?), have (.*?) arguments",
[j]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most single argument (.*?), have (.*?) arguments",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[e]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including"},
[k]={{q,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[k]={{r,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[o]={
[o]={
["clang/test/SemaCXX/default1.cpp"]={"clang/test/SemaCXX/default1.cpp:69:10: error: too many arguments to function call, expected at most single argument \'f\', have 2 arguments"}
["clang/test/SemaCXX/default1.cpp"]={"clang/test/SemaCXX/default1.cpp:69:10: error: too many arguments to function call, expected at most single argument \'f\', have 2 arguments"}
Line 7,688: Line 7,707:
},
},
["err_typecheck_call_too_many_args_at_most_suggest"]={
["err_typecheck_call_too_many_args_at_most_suggest"]={
[i]="too many ...arguments to ... call, expected at most A, have B; did you mean C?",
[c]="too many ...arguments to ... call, expected at most A, have B; did you mean C?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2; did you mean %3?",
[g]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2; did you mean %3?",
[g]=n,
[i]=l,
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?); did you mean (.*?)\\?",
[j]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?); did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[e]={"476c823ec8fd",1373325224,xb,xb},
[k]={{q,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}
[k]={{r,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}
},
},
["err_typecheck_call_too_many_args_one"]={
["err_typecheck_call_too_many_args_one"]={
[i]="too many ...arguments to ... call, expected single argument A, have B arguments",
[c]="too many ...arguments to ... call, expected single argument A, have B arguments",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments",
[g]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments",
[g]=n,
[i]=l,
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected single argument (.*?), have (.*?) arguments",
[j]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected single argument (.*?), have (.*?) arguments",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[e]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including"},
[k]={{q,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[k]={{r,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[o]={
[o]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:176:15: error: too many arguments to function call, expected single argument \'a\', have 2 arguments"}
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:176:15: error: too many arguments to function call, expected single argument \'a\', have 2 arguments"}
Line 7,715: Line 7,734:
},
},
["err_typecheck_call_too_many_args_suggest"]={
["err_typecheck_call_too_many_args_suggest"]={
[i]="too many ...arguments to ... call, expected A, have B; did you mean C?",
[c]="too many ...arguments to ... call, expected A, have B; did you mean C?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[g]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[g]=n,
[i]=l,
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[j]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[e]={"476c823ec8fd",1373325224,xb,xb},
[k]={{q,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}},
[k]={{r,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}},
[o]={
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:33:7: error: too many arguments to function call, expected 0, have 1; did you mean \'N::f\'?"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:33:7: error: too many arguments to function call, expected 0, have 1; did you mean \'N::f\'?"}
Line 7,730: Line 7,749:
},
},
["err_typecheck_cast_to_incomplete"]={
["err_typecheck_cast_to_incomplete"]={
[i]="cast to incomplete type A",
[c]="cast to incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cast to incomplete type %0",
[g]="cast to incomplete type %0",
[g]=n,
[i]=l,
[h]="cast to incomplete type (.*?)",
[j]="cast to incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to"},
[e]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to","Check for casts to an incomplete type in C.  Improves diagnostics for cast to"},
[k]={{lb,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{lb,3257,"void CastOperation::CheckBuiltinBitCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{q,21464,"/// Check a cast of an unknown-any type.  We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n  if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}},
[k]={{rb,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{rb,3257,"void CastOperation::CheckBuiltinBitCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{r,21464,"/// Check a cast of an unknown-any type.  We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n  if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}},
[o]={
[o]={
["clang/test/Sema/cast-incomplete.c"]={"clang/test/Sema/cast-incomplete.c:9:3: error: cast to incomplete type \'enum x\'","clang/test/Sema/cast-incomplete.c:10:3: error: cast to incomplete type \'struct y\'","clang/test/Sema/cast-incomplete.c:11:3: error: cast to incomplete type \'union z\'","clang/test/Sema/cast-incomplete.c:12:3: error: cast to incomplete type \'union z\'"}
["clang/test/Sema/cast-incomplete.c"]={"clang/test/Sema/cast-incomplete.c:9:3: error: cast to incomplete type \'enum x\'","clang/test/Sema/cast-incomplete.c:10:3: error: cast to incomplete type \'struct y\'","clang/test/Sema/cast-incomplete.c:11:3: error: cast to incomplete type \'union z\'","clang/test/Sema/cast-incomplete.c:12:3: error: cast to incomplete type \'union z\'"}
Line 7,745: Line 7,764:
},
},
["err_typecheck_cast_to_union_no_type"]={
["err_typecheck_cast_to_union_no_type"]={
[i]="cast to union type from type A not present in union",
[c]="cast to union type from type A not present in union",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cast to union type from type %0 not present in union",
[g]="cast to union type from type %0 not present in union",
[g]=n,
[i]=l,
[h]="cast to union type from type (.*?) not present in union",
[j]="cast to union type from type (.*?) not present in union",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{lb,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    // GCC\'s cast to union extension.\n    if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n      if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n      } else {\n        Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}},
[k]={{rb,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    // GCC\'s cast to union extension.\n    if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n      if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n      } else {\n        Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:8:5: error: cast to union type from type \'int *\' not present in union","clang/test/Sema/cast-to-union.c:9:5: error: cast to union type from type \'unsigned int\' not present in union","clang/test/Sema/cast-to-union.c:13:14: error: cast to union type from type \'double\' not present in union"}
["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:8:5: error: cast to union type from type \'int *\' not present in union","clang/test/Sema/cast-to-union.c:9:5: error: cast to union type from type \'unsigned int\' not present in union","clang/test/Sema/cast-to-union.c:13:14: error: cast to union type from type \'double\' not present in union"}
Line 7,760: Line 7,779:
},
},
["err_typecheck_choose_expr_requires_constant"]={
["err_typecheck_choose_expr_requires_constant"]={
[i]="\'__builtin_choose_expr\' requires a constant expression",
[c]="\'__builtin_choose_expr\' requires a constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="\'__builtin_choose_expr\' requires a constant expression",
[g]="\'__builtin_choose_expr\' requires a constant expression",
[g]=n,
[i]=l,
[h]="\'__builtin_choose_expr\' requires a constant expression",
[j]="\'__builtin_choose_expr\' requires a constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n  if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n  } else {\n    ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}},
[k]={{r,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n  if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n  } else {\n    ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}},
[o]={
[o]={
["clang/test/Parser/builtin_types_compatible.c"]={"clang/test/Parser/builtin_types_compatible.c:37:29: error: \'__builtin_choose_expr\' requires a constant expression"}
["clang/test/Parser/builtin_types_compatible.c"]={"clang/test/Parser/builtin_types_compatible.c:37:29: error: \'__builtin_choose_expr\' requires a constant expression"}
Line 7,775: Line 7,794:
},
},
["err_typecheck_comparison_of_distinct_blocks"]={
["err_typecheck_comparison_of_distinct_blocks"]={
[i]="comparison of distinct block types (A and B)",
[c]="comparison of distinct block types (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="comparison of distinct block types%diff{ ($ and $)|}0,1",
[g]="comparison of distinct block types%diff{ ($ and $)|}0,1",
[g]=n,
[i]=l,
[h]="comparison of distinct block types(?: \\((.*?) and (.*?)\\)|)",
[j]="comparison of distinct block types(?: \\((.*?) and (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Handle block pointer types.\n  if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n    if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Allow block pointers to be compared with null pointer constants.\n  if (!IsOrdered && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) {\n    if (!LHSIsNull && !RHSIsNull) {\n      if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) || (LHSType->isPointerType() && LHSType->castAs<PointerType>()->getPointeeType()->isVoidType())))\n        Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[k]={{r,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Handle block pointer types.\n  if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n    if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Allow block pointers to be compared with null pointer constants.\n  if (!IsOrdered && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) {\n    if (!LHSIsNull && !RHSIsNull) {\n      if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) || (LHSType->isPointerType() && LHSType->castAs<PointerType>()->getPointeeType()->isVoidType())))\n        Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_comparison_of_distinct_pointers"]={
["err_typecheck_comparison_of_distinct_pointers"]={
[i]="comparison of distinct pointer types (A and B)",
[c]="comparison of distinct pointer types (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="comparison of distinct pointer types%diff{ ($ and $)|}0,1",
[g]="comparison of distinct pointer types%diff{ ($ and $)|}0,1",
[g]=n,
[i]=l,
[h]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)",
[j]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="},
[e]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !=","Implement support for comparing pointers with <, >, <=, >=, ==, and !="},
[k]={{q,12324,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}},
[k]={{r,12324,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}},
[o]={
[o]={
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:17:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:18:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:19:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:21:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:23:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:25:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:17:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:18:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:19:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:21:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:23:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:25:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
Line 7,802: Line 7,821:
},
},
["err_typecheck_comparison_of_fptr_to_void"]={
["err_typecheck_comparison_of_fptr_to_void"]={
[i]="equality comparison between function pointer and void pointer (A and B)",
[c]="equality comparison between function pointer and void pointer (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="equality comparison between function pointer and void pointer (%0 and %1)",
[g]="equality comparison between function pointer and void pointer (%0 and %1)",
[g]=n,
[i]=l,
[h]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)",
[j]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[e]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect"},
[k]={{q,12365,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
[k]={{r,12365,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
},
},
["err_typecheck_comparison_of_pointer_integer"]={
["err_typecheck_comparison_of_pointer_integer"]={
[i]="comparison between pointer and integer (A and B)",
[c]="comparison between pointer and integer (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="comparison between pointer and integer (%0 and %1)",
[g]="comparison between pointer and integer (%0 and %1)",
[g]=n,
[i]=l,
[h]="comparison between pointer and integer \\((.*?) and (.*?)\\)",
[j]="comparison between pointer and integer \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[e]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect"},
[k]={{q,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    if (LangOpts.DebuggerSupport) {\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n    } else if (getLangOpts().CPlusPlus) {\n      DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}},
[k]={{r,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    if (LangOpts.DebuggerSupport) {\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n    } else if (getLangOpts().CPlusPlus) {\n      DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}},
[o]={
[o]={
["clang/test/CXX/over/over.built/spaceship.cpp"]={"clang/test/CXX/over/over.built/spaceship.cpp:16:12: error: comparison between pointer and integer (\'int\' and \'int *\')"}
["clang/test/CXX/over/over.built/spaceship.cpp"]={"clang/test/CXX/over/over.built/spaceship.cpp:16:12: error: comparison between pointer and integer (\'int\' and \'int *\')"}
Line 7,829: Line 7,848:
},
},
["err_typecheck_cond_expect_int_float"]={
["err_typecheck_cond_expect_int_float"]={
[i]="used type A where integer or floating point type is required",
[c]="used type A where integer or floating point type is required",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="used type %0 where integer or floating point type is required",
[g]="used type %0 where integer or floating point type is required",
[g]=n,
[i]=l,
[h]="used type (.*?) where integer or floating point type is required",
[j]="used type (.*?) where integer or floating point type is required",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector"},
[k]={{q,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{q,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}},
[k]={{r,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{r,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:113:12: error: used type \'__global int *\' where integer or floating point type is required"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:113:12: error: used type \'__global int *\' where integer or floating point type is required"}
Line 7,844: Line 7,863:
},
},
["err_typecheck_cond_expect_nonfloat"]={
["err_typecheck_cond_expect_nonfloat"]={
[i]="used type A where floating point type is not allowed",
[c]="used type A where floating point type is not allowed",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="used type %0 where floating point type is not allowed",
[g]="used type %0 where floating point type is not allowed",
[g]=n,
[i]=l,
[h]="used type (.*?) where floating point type is not allowed",
[j]="used type (.*?) where floating point type is not allowed",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector"},
[k]={{q,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n  if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{q,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}},
[k]={{r,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n  if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{r,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:102:12: error: used type \'float\' where floating point type is not allowed","clang/test/SemaOpenCL/cond.cl:107:12: error: used type \'float2\' (vector of 2 \'float\' values) where floating point type is not allowed"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:102:12: error: used type \'float\' where floating point type is not allowed","clang/test/SemaOpenCL/cond.cl:107:12: error: used type \'float2\' (vector of 2 \'float\' values) where floating point type is not allowed"}
Line 7,859: Line 7,878:
},
},
["err_typecheck_cond_expect_scalar"]={
["err_typecheck_cond_expect_scalar"]={
[i]="used type A where arithmetic or pointer type is required",
[c]="used type A where arithmetic or pointer type is required",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="used type %0 where arithmetic or pointer type is required",
[g]="used type %0 where arithmetic or pointer type is required",
[g]=n,
[i]=l,
[h]="used type (.*?) where arithmetic or pointer type is required",
[j]="used type (.*?) where arithmetic or pointer type is required",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{lb,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{q,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}},
[k]={{rb,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{r,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}},
[o]={
[o]={
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:10:9: error: used type \'struct foo\' where arithmetic or pointer type is required"}
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:10:9: error: used type \'struct foo\' where arithmetic or pointer type is required"}
Line 7,874: Line 7,893:
},
},
["err_typecheck_cond_incompatible_operands"]={
["err_typecheck_cond_incompatible_operands"]={
[i]="incompatible operand types (A and B)",
[c]="incompatible operand types (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incompatible operand types%diff{ ($ and $)|}0,1",
[g]="incompatible operand types%diff{ ($ and $)|}0,1",
[g]=n,
[i]=l,
[h]="incompatible operand types(?: \\((.*?) and (.*?)\\)|)",
[j]="incompatible operand types(?: \\((.*?) and (.*?)\\)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n    S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // Diagnose attempts to convert between __ibm128, __float128 and long double\n  // where such conversions currently can\'t be handled.\n  if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n    Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // If both operands have arithmetic type, do the usual arithmetic conversions\n  // to find a common type: C99 6.5.15p3,5.\n  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n    // Disallow invalid arithmetic conversions, such as those between bit-\n    // precise integers types of different sizes, or between a bit-precise\n    // integer and another type.\n    if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,9334,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{F,6261,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  case OR_No_Viable_Function:\n    Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{F,6766,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  //  -- The second and third operands have arithmetic or enumeration type;\n  //      the usual arithmetic conversions are performed to bring them to a\n  //      common type, and the result is of that type.\n  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {\n    if (ResTy.isNull()) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{F,6804,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[k]={{r,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n    S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // Diagnose attempts to convert between __ibm128, __float128 and long double\n  // where such conversions currently can\'t be handled.\n  if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n    Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // If both operands have arithmetic type, do the usual arithmetic conversions\n  // to find a common type: C99 6.5.15p3,5.\n  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n    // Disallow invalid arithmetic conversions, such as those between bit-\n    // precise integers types of different sizes, or between a bit-precise\n    // integer and another type.\n    if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9334,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6261,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  case OR_No_Viable_Function:\n    Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6766,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  //  -- The second and third operands have arithmetic or enumeration type;\n  //      the usual arithmetic conversions are performed to bring them to a\n  //      common type, and the result is of that type.\n  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {\n    if (ResTy.isNull()) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6804,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"}
Line 7,889: Line 7,908:
},
},
["err_typecheck_cond_incompatible_operands_null"]={
["err_typecheck_cond_incompatible_operands_null"]={
[i]="non-pointer operand type A incompatible with ...",
[c]="non-pointer operand type A incompatible with ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-pointer operand type %0 incompatible with %select{NULL|nullptr}1",
[g]="non-pointer operand type %0 incompatible with %select{NULL|nullptr}1",
[g]=n,
[i]=l,
[h]="non\\-pointer operand type (.*?) incompatible with (?:NULL|nullptr)",
[j]="non\\-pointer operand type (.*?) incompatible with (?:NULL|nullptr)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and"},
[e]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and","Initial steps to improve diagnostics when there is a NULL and"},
[k]={{q,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer.  Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}},
[k]={{r,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer.  Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:51:12: error: non-pointer operand type \'A\' incompatible with nullptr","clang/test/SemaCXX/nullptr.cpp:52:12: error: non-pointer operand type \'A\' incompatible with nullptr"}
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:51:12: error: non-pointer operand type \'A\' incompatible with nullptr","clang/test/SemaCXX/nullptr.cpp:52:12: error: non-pointer operand type \'A\' incompatible with nullptr"}
Line 7,904: Line 7,923:
},
},
["err_typecheck_convert_discards_qualifiers"]={
["err_typecheck_convert_discards_qualifiers"]={
[i]="... discards qualifiers",
[c]="... discards qualifiers",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers",
[g]="%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers",
[g]=n,
[i]=l,
[h]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) discards qualifiers",
[j]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) discards qualifiers",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case CompatiblePointerDiscardsQualifiers:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}},
[k]={{r,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case CompatiblePointerDiscardsQualifiers:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}},
[o]={
[o]={
["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:405:9: error: assigning to \'T\' (aka \'const int *(*)[]\') from \'S\' (aka \'const int *const (*)[]\') discards qualifiers"}
["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:405:9: error: assigning to \'T\' (aka \'const int *(*)[]\') from \'S\' (aka \'const int *const (*)[]\') discards qualifiers"}
Line 7,919: Line 7,938:
},
},
["err_typecheck_convert_incompatible"]={
["err_typecheck_convert_incompatible"]={
[i]=".........",
[c]=".........",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%5 vs %6)|: different exception specifications}4",
[g]="%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%5 vs %6)|: different exception specifications}4",
[g]=n,
[i]=l,
[h]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
[j]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n      if (TheCall->getArg(I)->getType() != ArgType)\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{w,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n    Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{w,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n    Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{w,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n  while (*TypeStr != \'\\0\') {\n    // The only case where the argument type and expected type are allowed to\n    // mismatch is if the argument type is a non-void pointer (or array) and\n    // expected type is a void pointer.\n    if (StrippedRVType != ExpectedType)\n      if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n        return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{q,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case Incompatible:\n    DiagKind = diag::err_typecheck_convert_incompatible;"}},
[k]={{w,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n      if (TheCall->getArg(I)->getType() != ArgType)\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{w,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n    Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{w,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n    Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{w,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n  while (*TypeStr != \'\\0\') {\n    // The only case where the argument type and expected type are allowed to\n    // mismatch is if the argument type is a non-void pointer (or array) and\n    // expected type is a void pointer.\n    if (StrippedRVType != ExpectedType)\n      if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n        return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{r,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case Incompatible:\n    DiagKind = diag::err_typecheck_convert_incompatible;"}},
[o]={
[o]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:17:7: error: assigning to \'C\' (aka \'void (X::*)() noexcept\') from incompatible type \'void (X::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:20:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:21:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications"}
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:17:7: error: assigning to \'C\' (aka \'void (X::*)() noexcept\') from incompatible type \'void (X::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:20:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:21:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications"}
Line 7,934: Line 7,953:
},
},
["err_typecheck_convert_incompatible_block_pointer"]={
["err_typecheck_convert_incompatible_block_pointer"]={
[i]="incompatible block pointer types ...",
[c]="incompatible block pointer types ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incompatible block pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2",
[g]="incompatible block pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2",
[g]=n,
[i]=l,
[h]="incompatible block pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))",
[j]="incompatible block pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the"},
[e]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the","Tighten up blocks type checking.  This was discussed back in the"},
[k]={{q,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleBlockPointer:\n    DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}},
[k]={{r,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleBlockPointer:\n    DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}},
[o]={
[o]={
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:10: error: incompatible block pointer types initializing \'void (^)(void)\' with an expression of type \'const void (^)(void)\'"}
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:10: error: incompatible block pointer types initializing \'void (^)(void)\' with an expression of type \'const void (^)(void)\'"}
Line 7,949: Line 7,968:
},
},
["err_typecheck_convert_incompatible_function_pointer"]={
["err_typecheck_convert_incompatible_function_pointer"]={
[i]="incompatible function pointer types ......",
[c]="incompatible function pointer types ......",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]="incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]=n,
[i]=l,
[h]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[j]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleFunctionPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}},
[k]={{r,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleFunctionPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}},
[o]={
[o]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:14:7: error: incompatible function pointer types assigning to \'A\' (aka \'void (*)() noexcept\') from \'void (*)()\'"}
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:14:7: error: incompatible function pointer types assigning to \'A\' (aka \'void (*)() noexcept\') from \'void (*)()\'"}
Line 7,964: Line 7,983:
},
},
["err_typecheck_convert_incompatible_pointer"]={
["err_typecheck_convert_incompatible_pointer"]={
[i]="incompatible pointer types ......",
[c]="incompatible pointer types ......",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]="incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]=n,
[i]=l,
[h]="incompatible pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[j]="incompatible pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointer:\n    if (Action == AA_Passing_CFAudited) {\n    } else if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}},
[k]={{r,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointer:\n    if (Action == AA_Passing_CFAudited) {\n    } else if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp:13:18: error: incompatible pointer types assigning to \'int *\' from \'float *\'"}
["clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp:13:18: error: incompatible pointer types assigning to \'int *\' from \'float *\'"}
Line 7,979: Line 7,998:
},
},
["err_typecheck_convert_incompatible_pointer_sign"]={
["err_typecheck_convert_incompatible_pointer_sign"]={
[i]="... converts between pointers to integer types ...",
[c]="... converts between pointers to integer types ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types %select{with different sign|where one is of the unique plain \'char\' type and the other is not}3",
[g]="%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types %select{with different sign|where one is of the unique plain \'char\' type and the other is not}3",
[g]=n,
[i]=l,
[h]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) converts between pointers to integer types (?:with different sign|where one is of the unique plain \'char\' type and the other is not)",
[j]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) converts between pointers to integer types (?:with different sign|where one is of the unique plain \'char\' type and the other is not)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerSign:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{q,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}},
[k]={{r,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerSign:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{r,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}},
[o]={
[o]={
["clang/test/Sema/incompatible-sign.cpp"]={"clang/test/Sema/incompatible-sign.cpp:7:7: error: assigning to \'signed char *\' from \'char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not","clang/test/Sema/incompatible-sign.cpp:13:7: error: assigning to \'char *\' from \'unsigned char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not"}
["clang/test/Sema/incompatible-sign.cpp"]={"clang/test/Sema/incompatible-sign.cpp:7:7: error: assigning to \'signed char *\' from \'char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not","clang/test/Sema/incompatible-sign.cpp:13:7: error: assigning to \'char *\' from \'unsigned char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not"}
Line 7,994: Line 8,013:
},
},
["err_typecheck_convert_int_pointer"]={
["err_typecheck_convert_int_pointer"]={
[i]="incompatible integer to pointer conversion ......",
[c]="incompatible integer to pointer conversion ......",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]="incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]=n,
[i]=l,
[h]="incompatible integer to pointer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[j]="incompatible integer to pointer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IntToPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_int_pointer;"}},
[k]={{r,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IntToPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_int_pointer;"}},
[o]={
[o]={
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"}
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"}
Line 8,009: Line 8,028:
},
},
["err_typecheck_convert_pointer_int"]={
["err_typecheck_convert_pointer_int"]={
[i]="incompatible pointer to integer conversion ......",
[c]="incompatible pointer to integer conversion ......",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]="incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3",
[g]=n,
[i]=l,
[h]="incompatible pointer to integer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[j]="incompatible pointer to integer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case PointerToInt:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_int;"}},
[k]={{r,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case PointerToInt:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_int;"}},
[o]={
[o]={
["clang/test/SemaObjCXX/comptypes-7.mm"]={"clang/test/SemaObjCXX/comptypes-7.mm:38:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id\'","clang/test/SemaObjCXX/comptypes-7.mm:39:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id<MyProtocol>\'","clang/test/SemaObjCXX/comptypes-7.mm:40:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'MyClass *\'","clang/test/SemaObjCXX/comptypes-7.mm:41:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'Class\'"}
["clang/test/SemaObjCXX/comptypes-7.mm"]={"clang/test/SemaObjCXX/comptypes-7.mm:38:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id\'","clang/test/SemaObjCXX/comptypes-7.mm:39:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id<MyProtocol>\'","clang/test/SemaObjCXX/comptypes-7.mm:40:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'MyClass *\'","clang/test/SemaObjCXX/comptypes-7.mm:41:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'Class\'"}
Line 8,024: Line 8,043:
},
},
["err_typecheck_convert_pointer_void_func"]={
["err_typecheck_convert_pointer_void_func"]={
[i]="... converts between void pointer and function pointer",
[c]="... converts between void pointer and function pointer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer",
[g]="%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer",
[g]=n,
[i]=l,
[h]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) converts between void pointer and function pointer",
[j]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) converts between void pointer and function pointer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={H,1576908663,I},
[e]={O,1576908663,y,y},
[k]={{q,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case FunctionVoidPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_void_func;"}}
[k]={{r,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case FunctionVoidPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_void_func;"}}
},
},
["err_typecheck_converted_constant_expression"]={
["err_typecheck_converted_constant_expression"]={
[i]="value of type A is not implicitly convertible to B",
[c]="value of type A is not implicitly convertible to B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="value of type %0 is not implicitly convertible to %1",
[g]="value of type %0 is not implicitly convertible to %1",
[g]=n,
[i]=l,
[h]="value of type (.*?) is not implicitly convertible to (.*?)",
[j]="value of type (.*?) is not implicitly convertible to (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[e]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case"},
[k]={{db,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  case ImplicitConversionSequence::BadConversion:\n    if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n      return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}},
[k]={{gb,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  case ImplicitConversionSequence::BadConversion:\n    if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n      return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}},
[o]={
[o]={
["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:71:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type3Helper<(boolTy)false>::Ty\' (aka \'boolTy\')","clang/test/Misc/integer-literal-printing.cpp:73:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type4Helper<(charTy)\'\\x00\'>::Ty\' (aka \'charTy\')","clang/test/Misc/integer-literal-printing.cpp:74:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type5Helper<(scharTy)\'\\x00\'>::Ty\' (aka \'scharTy\')","clang/test/Misc/integer-literal-printing.cpp:75:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type6Helper<(ucharTy)\'\\x00\'>::Ty\' (aka \'ucharTy\')","clang/test/Misc/integer-literal-printing.cpp:76:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type7Helper<(wcharTy)L\'\\x00\'>::Ty\' (aka \'wcharTy\')","clang/test/Misc/integer-literal-printing.cpp:77:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type8Helper<(char16Ty)u\'\\x00\'>::Ty\' (aka \'char16Ty\')","clang/test/Misc/integer-literal-printing.cpp:78:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type9Helper<(char32Ty)u\'\\x00\'>::Ty\' (aka \'char32Ty\')"}
["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:71:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type3Helper<(boolTy)false>::Ty\' (aka \'boolTy\')","clang/test/Misc/integer-literal-printing.cpp:73:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type4Helper<(charTy)\'\\x00\'>::Ty\' (aka \'charTy\')","clang/test/Misc/integer-literal-printing.cpp:74:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type5Helper<(scharTy)\'\\x00\'>::Ty\' (aka \'scharTy\')","clang/test/Misc/integer-literal-printing.cpp:75:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type6Helper<(ucharTy)\'\\x00\'>::Ty\' (aka \'ucharTy\')","clang/test/Misc/integer-literal-printing.cpp:76:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type7Helper<(wcharTy)L\'\\x00\'>::Ty\' (aka \'wcharTy\')","clang/test/Misc/integer-literal-printing.cpp:77:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type8Helper<(char16Ty)u\'\\x00\'>::Ty\' (aka \'char16Ty\')","clang/test/Misc/integer-literal-printing.cpp:78:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type9Helper<(char32Ty)u\'\\x00\'>::Ty\' (aka \'char32Ty\')"}
Line 8,051: Line 8,070:
},
},
["err_typecheck_converted_constant_expression_disallowed"]={
["err_typecheck_converted_constant_expression_disallowed"]={
[i]="conversion from A to B is not allowed in a converted constant expression",
[c]="conversion from A to B is not allowed in a converted constant expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="conversion from %0 to %1 is not allowed in a converted constant expression",
[g]="conversion from %0 to %1 is not allowed in a converted constant expression",
[g]=n,
[i]=l,
[h]="conversion from (.*?) to (.*?) is not allowed in a converted constant expression",
[j]="conversion from (.*?) to (.*?) is not allowed in a converted constant expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[e]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case"},
[k]={{db,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // Check that we would only use permitted conversions.\n  if (!CheckConvertedConstantConversions(S, *SCS)) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}},
[k]={{gb,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // Check that we would only use permitted conversions.\n  if (!CheckConvertedConstantConversions(S, *SCS)) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}},
[o]={
[o]={
["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:13: error: conversion from \'void *\' to \'bool\' is not allowed in a converted constant expression"}
["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:13: error: conversion from \'void *\' to \'bool\' is not allowed in a converted constant expression"}
Line 8,066: Line 8,085:
},
},
["err_typecheck_converted_constant_expression_indirect"]={
["err_typecheck_converted_constant_expression_indirect"]={
[i]="conversion from A to B in converted constant expression would bind reference to a temporary",
[c]="conversion from A to B in converted constant expression would bind reference to a temporary",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="conversion from %0 to %1 in converted constant expression would bind reference to a temporary",
[g]="conversion from %0 to %1 in converted constant expression would bind reference to a temporary",
[g]=n,
[i]=l,
[h]="conversion from (.*?) to (.*?) in converted constant expression would bind reference to a temporary",
[j]="conversion from (.*?) to (.*?) in converted constant expression would bind reference to a temporary",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[k]={{db,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // [...] and where the reference binding (if any) binds directly.\n  if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}},
[k]={{gb,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // [...] and where the reference binding (if any) binds directly.\n  if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}},
[o]={
[o]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:231:5: error: conversion from \'int\' to \'const int &\' in converted constant expression would bind reference to a temporary"}
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:231:5: error: conversion from \'int\' to \'const int &\' in converted constant expression would bind reference to a temporary"}
Line 8,081: Line 8,100:
},
},
["err_typecheck_decl_incomplete_type"]={
["err_typecheck_decl_incomplete_type"]={
[i]="variable has incomplete type A",
[c]="variable has incomplete type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="variable has incomplete type %0",
[g]="variable has incomplete type %0",
[g]=n,
[i]=l,
[h]="variable has incomplete type (.*?)",
[j]="variable has incomplete type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{u,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isVoidType()) {\n    // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n    //                    of objects and functions.\n    if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{u,13202,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (!VDecl->getType()->isDependentType()) {\n    if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{u,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{u,13728,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{u,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{u,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->hasAttr<AliasAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{z,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n  if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{q,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}},
[k]={{w,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{u,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isVoidType()) {\n    // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n    //                    of objects and functions.\n    if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{u,13202,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (!VDecl->getType()->isDependentType()) {\n    if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{u,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{u,13728,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{u,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{u,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->hasAttr<AliasAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{A,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n  if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{r,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}},
[o]={
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp:7:8: error: variable has incomplete type \'X<int>\'"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp:7:8: error: variable has incomplete type \'X<int>\'"}
Line 8,096: Line 8,115:
},
},
["err_typecheck_deleted_function"]={
["err_typecheck_deleted_function"]={
[i]="conversion function from A to B invokes a deleted function",
[c]="conversion function from A to B invokes a deleted function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="conversion function %diff{from $ to $|between types}0,1 invokes a deleted function",
[g]="conversion function %diff{from $ to $|between types}0,1 invokes a deleted function",
[g]=n,
[i]=l,
[h]="conversion function (?:from (.*?) to (.*?)|between types) invokes a deleted function",
[j]="conversion function (?:from (.*?) to (.*?)|between types) invokes a deleted function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={Ab,1260399737,Bb},
[e]={Tb,1260399737,lb,lb},
[k]={{E,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_Deleted: {\n      S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[k]={{M,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_Deleted: {\n      S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:34:7: error: conversion function from \'WithDel\' to \'int\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:74:9: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:83:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:85:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function"}
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:34:7: error: conversion function from \'WithDel\' to \'int\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:74:9: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:83:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:85:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function"}
Line 8,111: Line 8,130:
},
},
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
[i]="vector is not assignable (contains duplicate components)",
[c]="vector is not assignable (contains duplicate components)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="vector is not assignable (contains duplicate components)",
[g]="vector is not assignable (contains duplicate components)",
[g]=n,
[i]=l,
[h]="vector is not assignable \\(contains duplicate components\\)",
[j]="vector is not assignable \\(contains duplicate components\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14370,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_DuplicateVectorComponents:\n    DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}},
[k]={{r,14370,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_DuplicateVectorComponents:\n    DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}},
[o]={
[o]={
["clang/test/Sema/ext_vector_components.c"]={"clang/test/Sema/ext_vector_components.c:29:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:30:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:31:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:33:13: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:56:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:57:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:58:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:60:13: error: vector is not assignable (contains duplicate components)"}
["clang/test/Sema/ext_vector_components.c"]={"clang/test/Sema/ext_vector_components.c:29:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:30:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:31:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:33:13: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:56:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:57:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:58:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:60:13: error: vector is not assignable (contains duplicate components)"}
Line 8,126: Line 8,145:
},
},
["err_typecheck_expect_flt_or_vector"]={
["err_typecheck_expect_flt_or_vector"]={
[i]="invalid operand of type A where floating, complex or a vector of such types is required",
[c]="invalid operand of type A where floating, complex or a vector of such types is required",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid operand of type %0 where floating, complex or a vector of such types is required",
[g]="invalid operand of type %0 where floating, complex or a vector of such types is required",
[g]=n,
[i]=l,
[h]="invalid operand of type (.*?) where floating, complex or a vector of such types is required",
[j]="invalid operand of type (.*?) where floating, complex or a vector of such types is required",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={yb,1615397021,zb},
[e]={ac,1615397021,hb,hb},
[k]={{w,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!ArgTy->hasFloatingRepresentation())\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}},
[k]={{w,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!ArgTy->hasFloatingRepresentation())\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}},
[o]={
[o]={
Line 8,141: Line 8,160:
},
},
["err_typecheck_expect_int"]={
["err_typecheck_expect_int"]={
[i]="used type A where integer is required",
[c]="used type A where integer is required",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="used type %0 where integer is required",
[g]="used type %0 where integer is required",
[g]=n,
[i]=l,
[h]="used type (.*?) where integer is required",
[j]="used type (.*?) where integer is required",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[e]={"c65605d008dd",1423201495,Db,Db},
[k]={{w,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if (!IsValidIntegerType(AlignOp->getType())) {\n    S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{w,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n    return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{q,12117,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // The operands need to be integers.\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{q,12139,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{q,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{q,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}},
[k]={{w,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if (!IsValidIntegerType(AlignOp->getType())) {\n    S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{w,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n    return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{r,12117,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // The operands need to be integers.\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12139,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{r,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/ext_vector_ops.c"]={"clang/test/Sema/ext_vector_ops.c:129:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:130:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:131:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:132:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:133:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:134:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:135:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:136:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:146:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:147:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:157:6: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:158:6: error: used type \'float\' where integer is required"}
["clang/test/Sema/ext_vector_ops.c"]={"clang/test/Sema/ext_vector_ops.c:129:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:130:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:131:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:132:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:133:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:134:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:135:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:136:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:146:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:147:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:157:6: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:158:6: error: used type \'float\' where integer is required"}
Line 8,156: Line 8,175:
},
},
["err_typecheck_expect_scalar_operand"]={
["err_typecheck_expect_scalar_operand"]={
[i]="operand of type A where arithmetic or pointer type is required",
[c]="operand of type A where arithmetic or pointer type is required",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="operand of type %0 where arithmetic or pointer type is required",
[g]="operand of type %0 where arithmetic or pointer type is required",
[g]=n,
[i]=l,
[h]="operand of type (.*?) where arithmetic or pointer type is required",
[j]="operand of type (.*?) where arithmetic or pointer type is required",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{lb,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // Require the operand to be a scalar, a vector, or a matrix.\n  if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{w,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n    S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}},
[k]={{rb,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // Require the operand to be a scalar, a vector, or a matrix.\n  if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{w,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n    S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}},
[o]={
[o]={
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:11:12: error: operand of type \'struct foo\' where arithmetic or pointer type is required"}
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:11:12: error: operand of type \'struct foo\' where arithmetic or pointer type is required"}
Line 8,171: Line 8,190:
},
},
["err_typecheck_expression_not_modifiable_lvalue"]={
["err_typecheck_expression_not_modifiable_lvalue"]={
[i]="expression is not assignable",
[c]="expression is not assignable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="expression is not assignable",
[g]="expression is not assignable",
[g]=n,
[i]=l,
[h]="expression is not assignable",
[j]="expression is not assignable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14363,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ClassTemporary:\n    DiagID = diag::err_typecheck_expression_not_modifiable_lvalue;"}}
[k]={{r,14363,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ClassTemporary:\n    DiagID = diag::err_typecheck_expression_not_modifiable_lvalue;"}}
},
},
["err_typecheck_field_variable_size"]={
["err_typecheck_field_variable_size"]={
[i]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[c]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[g]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[g]=n,
[i]=l,
[h]="fields must have a constant size\\: \'variable length array in structure\' extension will never be supported",
[j]="fields must have a constant size\\: \'variable length array in structure\' extension will never be supported",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,18160,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n  // than a variably modified type.\n  if (!InvalidDecl && T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}},
[k]={{u,18160,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n  // than a variably modified type.\n  if (!InvalidDecl && T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}},
[o]={
[o]={
Line 8,198: Line 8,217:
},
},
["err_typecheck_illegal_increment_decrement"]={
["err_typecheck_illegal_increment_decrement"]={
[i]="cannot ... value of type A",
[c]="cannot ... value of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot %select{decrement|increment}1 value of type %0",
[g]="cannot %select{decrement|increment}1 value of type %0",
[g]=n,
[i]=l,
[h]="cannot (?:decrement|increment) value of type (.*?)",
[j]="cannot (?:decrement|increment) value of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n  } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n  } else if (ResType->isRealType()) {\n  } else if (ResType->isPointerType()) {\n  } else if (ResType->isObjCObjectPointerType()) {\n  } else if (ResType->isAnyComplexType()) {\n  } else if (ResType->isPlaceholderType()) {\n  } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n  } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n  } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n  } else {\n    S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}},
[k]={{r,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n  } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n  } else if (ResType->isRealType()) {\n  } else if (ResType->isPointerType()) {\n  } else if (ResType->isObjCObjectPointerType()) {\n  } else if (ResType->isAnyComplexType()) {\n  } else if (ResType->isPlaceholderType()) {\n  } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n  } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n  } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n  } else {\n    S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp:9:14: error: cannot increment value of type \'BoolRef\'"}
["clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp:9:14: error: cannot increment value of type \'BoolRef\'"}
Line 8,213: Line 8,232:
},
},
["err_typecheck_incompatible_address_space"]={
["err_typecheck_incompatible_address_space"]={
[i]="... changes address space of pointer",
[c]="... changes address space of pointer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of pointer",
[g]="%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of pointer",
[g]=n,
[i]=l,
[h]="(?:(?:assigning (.*?) to (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) changes address space of pointer",
[j]="(?:(?:assigning (.*?) to (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) changes address space of pointer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of "},
[e]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of ","Perform the bad-address-space conversions check as part of "},
[k]={{lb,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n  // Converting the top level pointee addrspace is permitted for compatible\n  // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n  // if any of the nested pointee addrspaces differ, we emit a warning\n  // regardless of addrspace compatibility. This makes\n  //  local int ** p;\n  //  return (generic int **) p;\n  // warn even though local -> generic is permitted.\n  if (Self.getLangOpts().OpenCL) {\n    unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{q,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerDiscardsQualifiers: {\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n      DiagKind = diag::err_typecheck_incompatible_address_space;"}},
[k]={{rb,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n  // Converting the top level pointee addrspace is permitted for compatible\n  // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n  // if any of the nested pointee addrspaces differ, we emit a warning\n  // regardless of addrspace compatibility. This makes\n  //  local int ** p;\n  //  return (generic int **) p;\n  // warn even though local -> generic is permitted.\n  if (Self.getLangOpts().OpenCL) {\n    unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{r,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerDiscardsQualifiers: {\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n      DiagKind = diag::err_typecheck_incompatible_address_space;"}},
[o]={
[o]={
["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:20:10: error: assigning \'__private int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:21:10: error: assigning \'__local int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:72:15: error: assigning \'__global int *\' to \'__global_host int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:78:17: error: assigning \'__global int *\' to \'__global_device int *\' changes address space of pointer"}
["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:20:10: error: assigning \'__private int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:21:10: error: assigning \'__local int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:72:15: error: assigning \'__global int *\' to \'__global_host int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:78:17: error: assigning \'__global int *\' to \'__global_device int *\' changes address space of pointer"}
Line 8,228: Line 8,247:
},
},
["err_typecheck_incompatible_nested_address_space"]={
["err_typecheck_incompatible_nested_address_space"]={
[i]="... changes address space of nested pointer",
[c]="... changes address space of nested pointer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of nested pointer",
[g]="%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of nested pointer",
[g]=n,
[i]=l,
[h]="(?:(?:assigning (.*?) to (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) changes address space of nested pointer",
[j]="(?:(?:assigning (.*?) to (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) changes address space of nested pointer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter."},
[e]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter.","[Sema][OpenCL] Make address space conversions a bit stricter."},
[k]={{q,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleNestedPointerAddressSpaceMismatch:\n    DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}},
[k]={{r,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleNestedPointerAddressSpaceMismatch:\n    DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}},
[o]={
[o]={
["clang/test/SemaOpenCL/address-spaces.cl"]={"clang/test/SemaOpenCL/address-spaces.cl:196:8: error: assigning \'__local int *__private *__private\' to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:207:8: error: assigning \'__global int *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:209:8: error: assigning \'__global float *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:215:10: error: assigning \'__local int *__private *__private\' to \'__global float *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:222:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:223:8: error: assigning \'__global int *__private *__private\' to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:226:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__private g_t *\' (aka \'__global int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:227:8: error: assigning \'__private g_t *__private\' (aka \'__global int *__private *__private\') to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer"}
["clang/test/SemaOpenCL/address-spaces.cl"]={"clang/test/SemaOpenCL/address-spaces.cl:196:8: error: assigning \'__local int *__private *__private\' to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:207:8: error: assigning \'__global int *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:209:8: error: assigning \'__global float *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:215:10: error: assigning \'__local int *__private *__private\' to \'__global float *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:222:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:223:8: error: assigning \'__global int *__private *__private\' to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:226:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__private g_t *\' (aka \'__global int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:227:8: error: assigning \'__private g_t *__private\' (aka \'__global int *__private *__private\') to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer"}
Line 8,243: Line 8,262:
},
},
["err_typecheck_incompatible_ownership"]={
["err_typecheck_incompatible_ownership"]={
[i]="... changes retain/release properties of pointer",
[c]="... changes retain/release properties of pointer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes retain/release properties of pointer",
[g]="%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes retain/release properties of pointer",
[g]=n,
[i]=l,
[h]="(?:(?:assigning (.*?) to (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) changes retain\\/release properties of pointer",
[j]="(?:(?:assigning (.*?) to (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) changes retain\\/release properties of pointer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[e]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'."},
[k]={{lb,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ARC imposes extra restrictions on casts.\n  if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n      if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n        if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n          Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{q,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerDiscardsQualifiers: {\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n    } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n      DiagKind = diag::err_typecheck_incompatible_ownership;"}},
[k]={{rb,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ARC imposes extra restrictions on casts.\n  if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n      if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n        if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n          Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{r,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerDiscardsQualifiers: {\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n    } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n      DiagKind = diag::err_typecheck_incompatible_ownership;"}},
[o]={
[o]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:53:7: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:54:14: error: initializing \'__weak id *\' with an expression of type \'id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:65:27: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer"}
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:53:7: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:54:14: error: initializing \'__weak id *\' with an expression of type \'id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:65:27: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer"}
Line 8,258: Line 8,277:
},
},
["err_typecheck_incomplete_array_needs_initializer"]={
["err_typecheck_incomplete_array_needs_initializer"]={
[i]="definition of variable with array type needs an explicit size or an initializer",
[c]="definition of variable with array type needs an explicit size or an initializer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="definition of variable with array type needs an explicit size or an initializer",
[g]="definition of variable with array type needs an explicit size or an initializer",
[g]=n,
[i]=l,
[h]="definition of variable with array type needs an explicit size or an initializer",
[j]="definition of variable with array type needs an explicit size or an initializer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"},
[e]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401","Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"},
[k]={{u,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n      if (Var->isConstexpr())\n      else\n        Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}},
[k]={{u,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n      if (Var->isConstexpr())\n      else\n        Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}},
[o]={
[o]={
Line 8,273: Line 8,292:
},
},
["err_typecheck_incomplete_tag"]={
["err_typecheck_incomplete_tag"]={
[i]="incomplete definition of type A",
[c]="incomplete definition of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incomplete definition of type %0",
[g]="incomplete definition of type %0",
[g]=n,
[i]=l,
[h]="incomplete definition of type (.*?)",
[j]="incomplete definition of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{J,655,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{J,675,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (SS.isSet()) {\n    if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n      SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{J,1361,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{db,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}},
[k]={{P,655,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{P,675,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (SS.isSet()) {\n    if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n      SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{P,1361,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{gb,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}},
[o]={
[o]={
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"}
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"}
Line 8,288: Line 8,307:
},
},
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
[i]="incomplete type A is not assignable",
[c]="incomplete type A is not assignable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="incomplete type %0 is not assignable",
[g]="incomplete type %0 is not assignable",
[g]=n,
[i]=l,
[h]="incomplete type (.*?) is not assignable",
[j]="incomplete type (.*?) is not assignable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14365,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_IncompleteVoidType:\n    return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}},
[k]={{r,14365,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_IncompleteVoidType:\n    return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}},
[o]={
[o]={
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:5:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:7:44: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:9:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:13:17: error: incomplete type \'void\' is not assignable"}
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:5:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:7:44: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:9:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:13:17: error: incomplete type \'void\' is not assignable"}
Line 8,303: Line 8,322:
},
},
["err_typecheck_indirection_requires_pointer"]={
["err_typecheck_indirection_requires_pointer"]={
[i]="indirection requires pointer operand (A invalid)",
[c]="indirection requires pointer operand (A invalid)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="indirection requires pointer operand (%0 invalid)",
[g]="indirection requires pointer operand (%0 invalid)",
[g]=n,
[i]=l,
[h]="indirection requires pointer operand \\((.*?) invalid\\)",
[j]="indirection requires pointer operand \\((.*?) invalid\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  if (Result.isNull()) {\n    S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}},
[k]={{r,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  if (Result.isNull()) {\n    S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"}
["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"}
Line 8,318: Line 8,337:
},
},
["err_typecheck_indirection_through_void_pointer_cpp"]={
["err_typecheck_indirection_through_void_pointer_cpp"]={
[i]="indirection not permitted on operand of type A",
[c]="indirection not permitted on operand of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="indirection not permitted on operand of type %0",
[g]="indirection not permitted on operand of type %0",
[g]=n,
[i]=l,
[h]="indirection not permitted on operand of type (.*?)",
[j]="indirection not permitted on operand of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{q,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  if (Result->isVoidType()) {\n    if (LO.CPlusPlus)\n      S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}},
[k]={{r,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  if (Result->isVoidType()) {\n    if (LO.CPlusPlus)\n      S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:217:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:218:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:219:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:220:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:221:9: error: indirection not permitted on operand of type \'void *\'"}
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:217:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:218:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:219:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:220:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:221:9: error: indirection not permitted on operand of type \'void *\'"}
Line 8,333: Line 8,352:
},
},
["err_typecheck_invalid_lvalue_addrof"]={
["err_typecheck_invalid_lvalue_addrof"]={
[i]="cannot take the address of an rvalue of type A",
[c]="cannot take the address of an rvalue of type A",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot take the address of an rvalue of type %0",
[g]="cannot take the address of an rvalue of type %0",
[g]=n,
[i]=l,
[h]="cannot take the address of an rvalue of type (.*?)",
[j]="cannot take the address of an rvalue of type (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,15031,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n    // C99 6.5.3.2p1\n    // The operand must be either an l-value or a function designator\n    if (!op->getType()->isFunctionType()) {\n      // Use a special diagnostic for loads from property references.\n      if (isa<PseudoObjectExpr>(op)) {\n      } else {\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}},
[k]={{r,15031,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n    // C99 6.5.3.2p1\n    // The operand must be either an l-value or a function designator\n    if (!op->getType()->isFunctionType()) {\n      // Use a special diagnostic for loads from property references.\n      if (isa<PseudoObjectExpr>(op)) {\n      } else {\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaObjC/property-not-lvalue.m"]={"clang/test/SemaObjC/property-not-lvalue.m:41:20: error: cannot take the address of an rvalue of type \'simd_float2\' (vector of 2 \'float\' values)"}
["clang/test/SemaObjC/property-not-lvalue.m"]={"clang/test/SemaObjC/property-not-lvalue.m:41:20: error: cannot take the address of an rvalue of type \'simd_float2\' (vector of 2 \'float\' values)"}
Line 8,348: Line 8,367:
},
},
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
[i]="extra \'&\' taking address of overloaded function",
[c]="extra \'&\' taking address of overloaded function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="extra \'&\' taking address of overloaded function",
[g]="extra \'&\' taking address of overloaded function",
[g]=n,
[i]=l,
[h]="extra \'&\' taking address of overloaded function",
[j]="extra \'&\' taking address of overloaded function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[e]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function"},
[k]={{q,14869,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    if (PTy->getKind() == BuiltinType::Overload) {\n      if (!isa<OverloadExpr>(E)) {\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}},
[k]={{r,14869,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    if (PTy->getKind() == BuiltinType::Overload) {\n      if (!isa<OverloadExpr>(E)) {\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"}
["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"}
Line 8,363: Line 8,382:
},
},
["err_typecheck_invalid_operands"]={
["err_typecheck_invalid_operands"]={
[i]="invalid operands to binary expression (A and B)",
[c]="invalid operands to binary expression (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid operands to binary expression (%0 and %1)",
[g]="invalid operands to binary expression (%0 and %1)",
[g]=n,
[i]=l,
[h]="invalid operands to binary expression \\((.*?) and (.*?)\\)",
[j]="invalid operands to binary expression \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  unsigned DiagID = diag::err_typecheck_invalid_operands;"},{q,12111,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // Do not allow shifts for boolean vectors.\n  if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{q,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{q,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[k]={{r,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  unsigned DiagID = diag::err_typecheck_invalid_operands;"},{r,12111,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // Do not allow shifts for boolean vectors.\n  if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{r,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:12:24: error: invalid operands to binary expression (\'id\' and \'const __strong id\')"}
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:12:24: error: invalid operands to binary expression (\'id\' and \'const __strong id\')"}
Line 8,378: Line 8,397:
},
},
["err_typecheck_invalid_restrict_invalid_pointee"]={
["err_typecheck_invalid_restrict_invalid_pointee"]={
[i]="pointer to function type A may not be \'restrict\' qualified",
[c]="pointer to function type A may not be \'restrict\' qualified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="pointer to function type %0 may not be \'restrict\' qualified",
[g]="pointer to function type %0 may not be \'restrict\' qualified",
[g]=n,
[i]=l,
[h]="pointer to function type (.*?) may not be \'restrict\' qualified",
[j]="pointer to function type (.*?) may not be \'restrict\' qualified",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{G,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n    if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n      // If we have a pointer or reference, the pointee must have an object\n      // incomplete type.\n      if (!EltTy->isIncompleteOrObjectType()) {\n        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}},
[k]={{K,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n    if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n      // If we have a pointer or reference, the pointee must have an object\n      // incomplete type.\n      if (!EltTy->isIncompleteOrObjectType()) {\n        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}},
[o]={
[o]={
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:23:1: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified","clang/test/Sema/declspec.c:24:3: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified"}
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:23:1: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified","clang/test/Sema/declspec.c:24:3: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified"}
Line 8,393: Line 8,412:
},
},
["err_typecheck_invalid_restrict_not_pointer"]={
["err_typecheck_invalid_restrict_not_pointer"]={
[i]="restrict requires a pointer or reference (A is invalid)",
[c]="restrict requires a pointer or reference (A is invalid)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="restrict requires a pointer or reference (%0 is invalid)",
[g]="restrict requires a pointer or reference (%0 is invalid)",
[g]=n,
[i]=l,
[h]="restrict requires a pointer or reference \\((.*?) is invalid\\)",
[j]="restrict requires a pointer or reference \\((.*?) is invalid\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{G,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n    if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n    } else if (!isDependentOrGNUAutoType(T)) {\n      DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}},
[k]={{K,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n    if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n    } else if (!isDependentOrGNUAutoType(T)) {\n      DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}},
[o]={
[o]={
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:22:1: error: restrict requires a pointer or reference (\'f\' (aka \'int (void)\') is invalid)"}
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:22:1: error: restrict requires a pointer or reference (\'f\' (aka \'int (void)\') is invalid)"}
Line 8,408: Line 8,427:
},
},
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
[i]="restrict requires a pointer or reference",
[c]="restrict requires a pointer or reference",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="restrict requires a pointer or reference",
[g]="restrict requires a pointer or reference",
[g]=n,
[i]=l,
[h]="restrict requires a pointer or reference",
[j]="restrict requires a pointer or reference",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a..."},
[e]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a...","implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a FIXME"},
[k]={{u,5109,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n    // or incomplete types shall not be restrict-qualified.\"\n    if (TypeQuals & DeclSpec::TQ_restrict)\n      Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}},
[k]={{u,5109,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n    // or incomplete types shall not be restrict-qualified.\"\n    if (TypeQuals & DeclSpec::TQ_restrict)\n      Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}},
[o]={
[o]={
Line 8,423: Line 8,442:
},
},
["err_typecheck_ivar_variable_size"]={
["err_typecheck_ivar_variable_size"]={
[i]="instance variables must have a constant size",
[c]="instance variables must have a constant size",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="instance variables must have a constant size",
[g]="instance variables must have a constant size",
[g]=n,
[i]=l,
[h]="instance variables must have a constant size",
[j]="instance variables must have a constant size",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,18386,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  }\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n  // than a variably modified type.\n  else if (T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}},
[k]={{u,18386,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  }\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n  // than a variably modified type.\n  else if (T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}},
[o]={
[o]={
Line 8,438: Line 8,457:
},
},
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
[i]="logical expression with vector ... is only supported in C++",
[c]="logical expression with vector ... is only supported in C++",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++",
[g]="logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++",
[g]=n,
[i]=l,
[h]="logical expression with vector (?:type (.*?) and non\\-vector type (.*?)|types (.*?) and (.*?)) is only supported in C\\+\\+",
[j]="logical expression with vector (?:type (.*?) and non\\-vector type (.*?)|types (.*?) and (.*?)) is only supported in C\\+\\+",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[e]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions"},
[k]={{q,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (!(LHSNatVec && RHSNatVec)) {\n    Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{q,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[k]={{r,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (!(LHSNatVec && RHSNatVec)) {\n    Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{r,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/vector-ops.c"]={
["clang/test/Sema/vector-ops.c"]={
Line 8,508: Line 8,527:
},
},
["err_typecheck_lvalue_casts_not_supported"]={
["err_typecheck_lvalue_casts_not_supported"]={
[i]="assignment to cast is illegal, lvalue casts are not supported",
[c]="assignment to cast is illegal, lvalue casts are not supported",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="assignment to cast is illegal, lvalue casts are not supported",
[g]="assignment to cast is illegal, lvalue casts are not supported",
[g]=n,
[i]=l,
[h]="assignment to cast is illegal, lvalue casts are not supported",
[j]="assignment to cast is illegal, lvalue casts are not supported",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14358,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_LValueCast:\n    DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}},
[k]={{r,14358,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_LValueCast:\n    DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}},
[o]={
[o]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:33:3: error: assignment to cast is illegal, lvalue casts are not supported"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:33:3: error: assignment to cast is illegal, lvalue casts are not supported"}
Line 8,523: Line 8,542:
},
},
["err_typecheck_member_reference_arrow"]={
["err_typecheck_member_reference_arrow"]={
[i]="member reference type A is not a pointer",
[c]="member reference type A is not a pointer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="member reference type %0 is not a pointer",
[g]="member reference type %0 is not a pointer",
[g]=n,
[i]=l,
[h]="member reference type (.*?) is not a pointer",
[j]="member reference type (.*?) is not a pointer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{F,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{J,1293,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n    } else if (BaseType->isFunctionType()) {\n    } else {\n      S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{db,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  case OR_No_Viable_Function: {\n    if (CandidateSet.empty()) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}},
[k]={{J,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{P,1293,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n    } else if (BaseType->isFunctionType()) {\n    } else {\n      S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{gb,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  case OR_No_Viable_Function: {\n    if (CandidateSet.empty()) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"}
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"}
Line 8,538: Line 8,557:
},
},
["err_typecheck_member_reference_ivar"]={
["err_typecheck_member_reference_ivar"]={
[i]="A does not have a member named B",
[c]="A does not have a member named B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 does not have a member named %1",
[g]="%0 does not have a member named %1",
[g]=n,
[i]=l,
[h]="(.*?) does not have a member named (.*?)",
[j]="(.*?) does not have a member named (.*?)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{J,1404,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      } else {\n        S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}},
[k]={{P,1404,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      } else {\n        S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:6:14: error: \'SomeClass\' does not have a member named \'privateIvar\'","clang/test/SemaObjC/ivar-in-class-extension.m:7:21: error: \'SomeClass\' does not have a member named \'publicIvar\'"}
["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:6:14: error: \'SomeClass\' does not have a member named \'privateIvar\'","clang/test/SemaObjC/ivar-in-class-extension.m:7:21: error: \'SomeClass\' does not have a member named \'publicIvar\'"}
Line 8,553: Line 8,572:
},
},
["err_typecheck_member_reference_ivar_suggest"]={
["err_typecheck_member_reference_ivar_suggest"]={
[i]="A does not have a member named B; did you mean C?",
[c]="A does not have a member named B; did you mean C?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%0 does not have a member named %1; did you mean %2?",
[g]="%0 does not have a member named %1; did you mean %2?",
[g]=n,
[i]=l,
[h]="(.*?) does not have a member named (.*?); did you mean (.*?)\\?",
[j]="(.*?) does not have a member named (.*?); did you mean (.*?)\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[e]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific"},
[k]={{J,1378,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n        S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}},
[k]={{P,1378,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n        S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}},
[o]={
[o]={
["clang/test/SemaObjC/typo-correction.m"]={"clang/test/SemaObjC/typo-correction.m:48:15: error: \'I\' does not have a member named \'implementation\'; did you mean \'_implementation\'?","clang/test/SemaObjC/typo-correction.m:49:15: error: \'I\' does not have a member named \'interface\'; did you mean \'_interface\'?","clang/test/SemaObjC/typo-correction.m:50:15: error: \'I\' does not have a member named \'extension\'; did you mean \'_extension\'?"}
["clang/test/SemaObjC/typo-correction.m"]={"clang/test/SemaObjC/typo-correction.m:48:15: error: \'I\' does not have a member named \'implementation\'; did you mean \'_implementation\'?","clang/test/SemaObjC/typo-correction.m:49:15: error: \'I\' does not have a member named \'interface\'; did you mean \'_interface\'?","clang/test/SemaObjC/typo-correction.m:50:15: error: \'I\' does not have a member named \'extension\'; did you mean \'_extension\'?"}
Line 8,568: Line 8,587:
},
},
["err_typecheck_member_reference_struct_union"]={
["err_typecheck_member_reference_struct_union"]={
[i]="member reference base type A is not a structure or union",
[c]="member reference base type A is not a structure or union",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="member reference base type %0 is not a structure or union",
[g]="member reference base type %0 is not a structure or union",
[g]=n,
[i]=l,
[h]="member reference base type (.*?) is not a structure or union",
[j]="member reference base type (.*?) is not a structure or union",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{J,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // Even in dependent contexts, try to diagnose base expressions with\n  // obviously wrong types, e.g.:\n  //\n  // T* t;\n  // t.f;\n  //\n  // In Obj-C++, however, the above expression is valid, since it could be\n  // accessing the \'f\' property if T is an Obj-C interface. The extra check\n  // allows this, while still reporting an error if T is a struct pointer.\n  if (!IsArrow) {\n    if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{J,1691,"fail:\n  S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}},
[k]={{P,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // Even in dependent contexts, try to diagnose base expressions with\n  // obviously wrong types, e.g.:\n  //\n  // T* t;\n  // t.f;\n  //\n  // In Obj-C++, however, the above expression is valid, since it could be\n  // accessing the \'f\' property if T is an Obj-C interface. The extra check\n  // allows this, while still reporting an error if T is a struct pointer.\n  if (!IsArrow) {\n    if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{P,1691,"fail:\n  S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}},
[o]={
[o]={
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:66:24: error: member reference base type \'void *\' is not a structure or union"}
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:66:24: error: member reference base type \'void *\' is not a structure or union"}
Line 8,583: Line 8,602:
},
},
["err_typecheck_member_reference_suggestion"]={
["err_typecheck_member_reference_suggestion"]={
[i]="member reference type A is ... pointer; did you mean to use \'...\'?",
[c]="member reference type A is ... pointer; did you mean to use \'...\'?",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="member reference type %0 is %select{a|not a}1 pointer; did you mean to use \'%select{->|.}1\'?",
[g]="member reference type %0 is %select{a|not a}1 pointer; did you mean to use \'%select{->|.}1\'?",
[g]=n,
[i]=l,
[h]="member reference type (.*?) is (?:a|not a) pointer; did you mean to use \'(?:\\-\\>|\\.)\'\\?",
[j]="member reference type (.*?) is (?:a|not a) pointer; did you mean to use \'(?:\\-\\>|\\.)\'\\?",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records."},
[e]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records.","Recover from dot accesses to record pointers and arrow accesses to records."},
[k]={{F,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          if (FirstIteration) {\n            Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{F,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n  // C++ [expr.pseudo]p2:\n  //  The left-hand side of the dot operator shall be of scalar type. The\n  //  left-hand side of the arrow operator shall be of pointer to scalar type.\n  //  This scalar type is the object type.\n  // Note that this is rather different from the normal handling for the\n  // arrow operator.\n  if (OpKind == tok::arrow) {\n    if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n    } else if (!Base->isTypeDependent()) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{F,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n          auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{J,1285,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n      // Recover from arrow accesses to records, e.g.:\n      //  struct MyRecord foo;\n      //  foo->bar\n      // This is actually well-formed in C++ if MyRecord has an\n      // overloaded operator->, but that should have been dealt with\n      // by now--or a diagnostic message already issued if a problem\n      // was encountered while looking for the overloaded operator->.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,1664,"fail:\n  // Recover from dot accesses to pointers, e.g.:\n  //  type *foo;\n  //  foo.bar\n  // This is actually well-formed in two cases:\n  //  - \'type\' is an Objective C type\n  //  - \'bar\' is a pseudo-destructor name which happens to refer to\n  //    the appropriate pointer type\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[k]={{J,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          if (FirstIteration) {\n            Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n  // C++ [expr.pseudo]p2:\n  //  The left-hand side of the dot operator shall be of scalar type. The\n  //  left-hand side of the arrow operator shall be of pointer to scalar type.\n  //  This scalar type is the object type.\n  // Note that this is rather different from the normal handling for the\n  // arrow operator.\n  if (OpKind == tok::arrow) {\n    if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n    } else if (!Base->isTypeDependent()) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\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    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n          auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{P,1285,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n      // Recover from arrow accesses to records, e.g.:\n      //  struct MyRecord foo;\n      //  foo->bar\n      // This is actually well-formed in C++ if MyRecord has an\n      // overloaded operator->, but that should have been dealt with\n      // by now--or a diagnostic message already issued if a problem\n      // was encountered while looking for the overloaded operator->.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{P,1664,"fail:\n  // Recover from dot accesses to pointers, e.g.:\n  //  type *foo;\n  //  foo.bar\n  // This is actually well-formed in two cases:\n  //  - \'type\' is an Objective C type\n  //  - \'bar\' is a pseudo-destructor name which happens to refer to\n  //    the appropriate pointer type\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[o]={
[o]={
["clang/test/Sema/member-reference.c"]={"clang/test/Sema/member-reference.c:23:11: error: member reference type \'struct simple\' is not a pointer; did you mean to use \'.\'?"}
["clang/test/Sema/member-reference.c"]={"clang/test/Sema/member-reference.c:23:11: error: member reference type \'struct simple\' is not a pointer; did you mean to use \'.\'?"}
Line 8,598: Line 8,617:
},
},
["err_typecheck_member_reference_type"]={
["err_typecheck_member_reference_type"]={
[i]="cannot refer to type member A in B with \'...\'",
[c]="cannot refer to type member A in B with \'...\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot refer to type member %0 in %1 with \'%select{.|->}2\'",
[g]="cannot refer to type member %0 in %1 with \'%select{.|->}2\'",
[g]=n,
[i]=l,
[h]="cannot refer to type member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[j]="cannot refer to type member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{J,1176,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n    Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}},
[k]={{P,1176,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n    Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}},
[o]={
[o]={
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:16:5: error: cannot refer to type member \'E\' in \'X\' with \'.\'","clang/test/SemaCXX/member-expr.cpp:17:7: error: cannot refer to type member \'E\' in \'X\' with \'->\'"}
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:16:5: error: cannot refer to type member \'E\' in \'X\' with \'.\'","clang/test/SemaCXX/member-expr.cpp:17:7: error: cannot refer to type member \'E\' in \'X\' with \'->\'"}
Line 8,613: Line 8,632:
},
},
["err_typecheck_member_reference_unknown"]={
["err_typecheck_member_reference_unknown"]={
[i]="cannot refer to member A in B with \'...\'",
[c]="cannot refer to member A in B with \'...\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot refer to member %0 in %1 with \'%select{.|->}2\'",
[g]="cannot refer to member %0 in %1 with \'%select{.|->}2\'",
[g]=n,
[i]=l,
[h]="cannot refer to member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[j]="cannot refer to member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{J,1179,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n  else\n    Diag(MemberLoc, diag::err_typecheck_member_reference_unknown) << MemberName << BaseType << int(IsArrow);"}}
[k]={{P,1179,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n  else\n    Diag(MemberLoc, diag::err_typecheck_member_reference_unknown) << MemberName << BaseType << int(IsArrow);"}}
},
},
["err_typecheck_missing_return_type_incompatible"]={
["err_typecheck_missing_return_type_incompatible"]={
[i]="return type A must match previous return type B when ... has unspecified explicit return type",
[c]="return type A must match previous return type B when ... has unspecified explicit return type",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%diff{return type $ must match previous return type $|return type must match previous return type}0,1 when %select{block literal|lambda expression}2 has unspecified explicit return type",
[g]="%diff{return type $ must match previous return type $|return type must match previous return type}0,1 when %select{block literal|lambda expression}2 has unspecified explicit return type",
[g]=n,
[i]=l,
[h]="(?:return type (.*?) must match previous return type (.*?)|return type must match previous return type) when (?:block literal|lambda expression) has unspecified explicit return type",
[j]="(?:return type (.*?) must match previous return type (.*?)|return type must match previous return type) when (?:block literal|lambda expression) has unspecified explicit return type",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is "},
[e]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is ","If block literal return type is not specified, return type of the block is "},
[k]={{vb,704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n  // We require the return types to strictly match here.\n  // Note that we\'ve already done the required promotions as part of\n  // processing the return statement.\n  for (const ReturnStmt *RS : CSI.Returns) {\n    Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{N,3860,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    case TDK_Inconsistent: {\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n        Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}},
[k]={{cc,704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n  // We require the return types to strictly match here.\n  // Note that we\'ve already done the required promotions as part of\n  // processing the return statement.\n  for (const ReturnStmt *RS : CSI.Returns) {\n    Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{T,3860,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    case TDK_Inconsistent: {\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n        Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}},
[o]={
[o]={
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:22:7: error: return type \'double\' must match previous return type \'float\' when block literal has unspecified explicit return type"}
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:22:7: error: return type \'double\' must match previous return type \'float\' when block literal has unspecified explicit return type"}
Line 8,640: Line 8,659:
},
},
["err_typecheck_negative_array_size"]={
["err_typecheck_negative_array_size"]={
[i]="array size is negative",
[c]="array size is negative",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="array size is negative",
[g]="array size is negative",
[g]=n,
[i]=l,
[h]="array size is negative",
[j]="array size is negative",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n  if (SizeIsNegative)\n    Diag(Loc, diag::err_typecheck_negative_array_size);"},{u,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n  if (T->isVariablyModifiedType()) {\n    if (S->getFnParent() == nullptr) {\n      if (FixedTInfo) {\n      } else {\n        if (SizeIsNegative)\n          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{F,2221,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // We\'ve already performed any required implicit conversion to integer or\n    // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (Value->isSigned() && Value->isNegative()) {\n        return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{G,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n      // have a value greater than zero.\n      // In C++, this follows from narrowing conversions being disallowed.\n      if (ConstVal.isSigned() && ConstVal.isNegative()) {\n        if (Entity)\n        else\n          Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}},
[k]={{u,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n  if (SizeIsNegative)\n    Diag(Loc, diag::err_typecheck_negative_array_size);"},{u,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n  if (T->isVariablyModifiedType()) {\n    if (S->getFnParent() == nullptr) {\n      if (FixedTInfo) {\n      } else {\n        if (SizeIsNegative)\n          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{J,2221,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // We\'ve already performed any required implicit conversion to integer or\n    // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (Value->isSigned() && Value->isNegative()) {\n        return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{K,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n      // have a value greater than zero.\n      // In C++, this follows from narrowing conversions being disallowed.\n      if (ConstVal.isSigned() && ConstVal.isNegative()) {\n        if (Entity)\n        else\n          Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}},
[o]={
[o]={
[Db]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:76:19: error: array size is negative"}
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:76:19: error: array size is negative"}
}
}
},
},
["err_typecheck_non_object_not_modifiable_lvalue"]={
["err_typecheck_non_object_not_modifiable_lvalue"]={
[i]="non-object type A is not assignable",
[c]="non-object type A is not assignable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="non-object type %0 is not assignable",
[g]="non-object type %0 is not assignable",
[g]=n,
[i]=l,
[h]="non\\-object type (.*?) is not assignable",
[j]="non\\-object type (.*?) is not assignable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,14351,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_NotObjectType:\n    DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}},
[k]={{r,14351,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_NotObjectType:\n    DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}},
[o]={
[o]={
["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"}
["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"}
Line 8,670: Line 8,689:
},
},
["err_typecheck_nonviable_condition"]={
["err_typecheck_nonviable_condition"]={
[i]="no viable conversion...",
[c]="no viable conversion...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0",
[g]="no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0",
[g]=n,
[i]=l,
[h]="no viable conversion(?:(?: from (.*?) to (.*?)|)|(?: from returned value of type (.*?) to function return type (.*?)|))",
[j]="no viable conversion(?:(?: from (.*?) to (.*?)|)|(?: from returned value of type (.*?) to function return type (.*?)|))",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "},
[e]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of ","Improve on diagnosing type mismatches because of "},
[k]={{E,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n        S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{db,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n      Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}},
[k]={{M,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n        S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{gb,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n      Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}},
[o]={
[o]={
["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:34: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:37: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: no viable conversion from \'S2\' to \'float\'"}
["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:34: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:37: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: no viable conversion from \'S2\' to \'float\'"}
Line 8,685: Line 8,704:
},
},
["err_typecheck_nonviable_condition_incomplete"]={
["err_typecheck_nonviable_condition_incomplete"]={
[i]="no viable conversion from A to incomplete type B",
[c]="no viable conversion from A to incomplete type B",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="no viable conversion%diff{ from $ to incomplete type $|}0,1",
[g]="no viable conversion%diff{ from $ to incomplete type $|}0,1",
[g]=n,
[i]=l,
[h]="no viable conversion(?: from (.*?) to incomplete type (.*?)|)",
[j]="no viable conversion(?: from (.*?) to incomplete type (.*?)|)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i..."},
[e]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i...","Fix a conversion to incomplete type bug -- The error message now specifically states that the type is incomplete and points to the forward declaration of the incomplete type."},
[k]={{E,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{db,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}},
[k]={{M,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{gb,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}},
[o]={
[o]={
["clang/test/SemaCXX/conversion-incomplete-type.cpp"]={"clang/test/SemaCXX/conversion-incomplete-type.cpp:12:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'","clang/test/SemaCXX/conversion-incomplete-type.cpp:20:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'"}
["clang/test/SemaCXX/conversion-incomplete-type.cpp"]={"clang/test/SemaCXX/conversion-incomplete-type.cpp:12:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'","clang/test/SemaCXX/conversion-incomplete-type.cpp:20:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'"}
Line 8,700: Line 8,719:
},
},
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
[i]="... which are pointers to non-overlapping address spaces",
[c]="... which are pointers to non-overlapping address spaces",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%select{comparison between %diff{ ($ and $)|}0,1|arithmetic operation with operands of type %diff{ ($ and $)|}0,1|conditional operator with the second and third operands of type %diff{ ($ and $)|}0,1}2 which are pointers to non-overlapping address spaces",
[g]="%select{comparison between %diff{ ($ and $)|}0,1|arithmetic operation with operands of type %diff{ ($ and $)|}0,1|conditional operator with the second and third operands of type %diff{ ($ and $)|}0,1}2 which are pointers to non-overlapping address spaces",
[g]=n,
[i]=l,
[h]="(?:comparison between (?: \\((.*?) and (.*?)\\)|)|arithmetic operation with operands of type (?: \\((.*?) and (.*?)\\)|)|conditional operator with the second and third operands of type (?: \\((.*?) and (.*?)\\)|)) which are pointers to non\\-overlapping address spaces",
[j]="(?:comparison between (?: \\((.*?) and (.*?)\\)|)|arithmetic operation with operands of type (?: \\((.*?) and (.*?)\\)|)|conditional operator with the second and third operands of type (?: \\((.*?) and (.*?)\\)|)) which are pointers to non\\-overlapping address spaces",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."},
[e]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.","[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."},
[k]={{q,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n  // spaces is disallowed.\n  if (lhQual.isAddressSpaceSupersetOf(rhQual))\n  else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n  else {\n    S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  // if both are pointers check if operation is valid wrt address spaces\n  if (isLHSPointer && isRHSPointer) {\n    if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n      S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{q,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n  } else if (getLangOpts().CPlusPlus) {\n  } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n    if (LCanPointeeTy != RCanPointeeTy) {\n      // Treat NULL constant as a special case in OpenCL.\n      if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n        if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n          Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}},
[k]={{r,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n  // spaces is disallowed.\n  if (lhQual.isAddressSpaceSupersetOf(rhQual))\n  else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n  else {\n    S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  // if both are pointers check if operation is valid wrt address spaces\n  if (isLHSPointer && isRHSPointer) {\n    if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n      S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{r,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n  } else if (getLangOpts().CPlusPlus) {\n  } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n    if (LCanPointeeTy != RCanPointeeTy) {\n      // Treat NULL constant as a special case in OpenCL.\n      if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n        if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n          Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}},
[o]={
[o]={
["clang/test/SemaCXX/address-space-arithmetic.cpp"]={"clang/test/SemaCXX/address-space-arithmetic.cpp:5:12: error: arithmetic operation with operands of type  (\'__private int *\' and \'__local int *\') which are pointers to non-overlapping address spaces"}
["clang/test/SemaCXX/address-space-arithmetic.cpp"]={"clang/test/SemaCXX/address-space-arithmetic.cpp:5:12: error: arithmetic operation with operands of type  (\'__private int *\' and \'__local int *\') which are pointers to non-overlapping address spaces"}
Line 8,715: Line 8,734:
},
},
["err_typecheck_ordered_comparison_of_function_pointers"]={
["err_typecheck_ordered_comparison_of_function_pointers"]={
[i]="ordered comparison of function pointers (A and B)",
[c]="ordered comparison of function pointers (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ordered comparison of function pointers (%0 and %1)",
[g]="ordered comparison of function pointers (%0 and %1)",
[g]=n,
[i]=l,
[h]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
[j]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={yb,1615397021,zb},
[e]={ac,1615397021,hb,hb},
[k]={{q,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n    auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}},
[k]={{r,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n    auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}},
[o]={
[o]={
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:15:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\')","clang/test/SemaCXX/compare-function-pointer.cpp:27:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:15:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\')","clang/test/SemaCXX/compare-function-pointer.cpp:27:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
Line 8,730: Line 8,749:
},
},
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
[i]="ordered comparison between pointer and zero (A and B)",
[c]="ordered comparison between pointer and zero (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="ordered comparison between pointer and zero (%0 and %1)",
[g]="ordered comparison between pointer and zero (%0 and %1)",
[g]=n,
[i]=l,
[h]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\)",
[j]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."},
[e]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.","DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."},
[k]={{q,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    if (LangOpts.DebuggerSupport) {\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n      if (IsOrdered) {\n        DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}},
[k]={{r,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    if (LangOpts.DebuggerSupport) {\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n      if (IsOrdered) {\n        DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}},
[o]={
[o]={
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:25: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:36: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:51: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:26: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:38: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:54: error: ordered comparison between pointer and zero (\'long\' and \'int *\')"}
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:25: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:36: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:51: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:26: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:38: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:54: error: ordered comparison between pointer and zero (\'long\' and \'int *\')"}
Line 8,745: Line 8,764:
},
},
["err_typecheck_pointer_arith_function_type"]={
["err_typecheck_pointer_arith_function_type"]={
[i]="arithmetic on... pointer... to... function type... A...",
[c]="arithmetic on... pointer... to... function type... A...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2",
[g]="arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2",
[g]=n,
[i]=l,
[h]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?))",
[j]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?))",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{q,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}},
[k]={{r,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{r,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}},
[o]={
[o]={
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:16: error: arithmetic on a pointer to the function type \'void ()\'","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:24: error: arithmetic on a pointer to the function type \'void ()\'"}
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:16: error: arithmetic on a pointer to the function type \'void ()\'","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:24: error: arithmetic on a pointer to the function type \'void ()\'"}
Line 8,760: Line 8,779:
},
},
["err_typecheck_pointer_arith_void_type"]={
["err_typecheck_pointer_arith_void_type"]={
[i]="arithmetic on... pointer... to void",
[c]="arithmetic on... pointer... to void",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void",
[g]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void",
[g]=n,
[i]=l,
[h]="arithmetic on(?: a|) pointer(?:|s) to void",
[j]="arithmetic on(?: a|) pointer(?:|s) to void",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,11431,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{q,11441,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}},
[k]={{r,11431,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{r,11441,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}},
[o]={
[o]={
["clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:178:15: error: arithmetic on a pointer to void"}
["clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:178:15: error: arithmetic on a pointer to void"}
Line 8,775: Line 8,794:
},
},
["err_typecheck_sclass_fscope"]={
["err_typecheck_sclass_fscope"]={
[i]="illegal storage class on file-scoped variable",
[c]="illegal storage class on file-scoped variable",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="illegal storage class on file-scoped variable",
[g]="illegal storage class on file-scoped variable",
[g]=n,
[i]=l,
[h]="illegal storage class on file\\-scoped variable",
[j]="illegal storage class on file\\-scoped variable",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!DC->isRecord() && S->getFnParent() == nullptr) {\n    // C99 6.9p2: The storage-class specifiers auto and register shall not\n    // appear in the declaration specifiers in an external declaration.\n    // Global Register+Asm is a GNU extension we support.\n    if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n      Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}},
[k]={{u,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!DC->isRecord() && S->getFnParent() == nullptr) {\n    // C99 6.9p2: The storage-class specifiers auto and register shall not\n    // appear in the declaration specifiers in an external declaration.\n    // Global Register+Asm is a GNU extension we support.\n    if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n      Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}},
[o]={
[o]={
Line 8,790: Line 8,809:
},
},
["err_typecheck_sclass_func"]={
["err_typecheck_sclass_func"]={
[i]="illegal storage class on function",
[c]="illegal storage class on function",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="illegal storage class on function",
[g]="illegal storage class on function",
[g]=n,
[i]=l,
[h]="illegal storage class on function",
[j]="illegal storage class on function",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{u,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_mutable:\n    SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}},
[k]={{u,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_mutable:\n    SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}},
[o]={
[o]={
Line 8,805: Line 8,824:
},
},
["err_typecheck_statement_requires_integer"]={
["err_typecheck_statement_requires_integer"]={
[i]="statement requires expression of integer type (A invalid)",
[c]="statement requires expression of integer type (A invalid)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="statement requires expression of integer type (%0 invalid)",
[g]="statement requires expression of integer type (%0 invalid)",
[g]=n,
[i]=l,
[h]="statement requires expression of integer type \\((.*?) invalid\\)",
[j]="statement requires expression of integer type \\((.*?) invalid\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{N,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}},
[k]={{T,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}},
[o]={
[o]={
["clang/test/SemaTemplate/non-integral-switch-cond.cpp"]={"clang/test/SemaTemplate/non-integral-switch-cond.cpp:9:5: error: statement requires expression of integer type (\'NOT_AN_INTEGRAL_TYPE\' invalid)"}
["clang/test/SemaTemplate/non-integral-switch-cond.cpp"]={"clang/test/SemaTemplate/non-integral-switch-cond.cpp:9:5: error: statement requires expression of integer type (\'NOT_AN_INTEGRAL_TYPE\' invalid)"}
Line 8,820: Line 8,839:
},
},
["err_typecheck_statement_requires_scalar"]={
["err_typecheck_statement_requires_scalar"]={
[i]="statement requires expression of scalar type (A invalid)",
[c]="statement requires expression of scalar type (A invalid)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="statement requires expression of scalar type (%0 invalid)",
[g]="statement requires expression of scalar type (%0 invalid)",
[g]=n,
[i]=l,
[h]="statement requires expression of scalar type \\((.*?) invalid\\)",
[j]="statement requires expression of scalar type \\((.*?) invalid\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n  if (!E->isTypeDependent()) {\n    if (!T->isScalarType()) { // C99 6.8.4.1p1\n      Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}},
[k]={{r,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n  if (!E->isTypeDependent()) {\n    if (!T->isScalarType()) { // C99 6.8.4.1p1\n      Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:43:3: error: statement requires expression of scalar type (\'enum some_undefined_enum\' invalid)"}
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:43:3: error: statement requires expression of scalar type (\'enum some_undefined_enum\' invalid)"}
Line 8,835: Line 8,854:
},
},
["err_typecheck_sub_ptr_compatible"]={
["err_typecheck_sub_ptr_compatible"]={
[i]="A and B are not pointers to compatible types",
[c]="A and B are not pointers to compatible types",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1",
[g]="%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1",
[g]=n,
[i]=l,
[h]="(?:(.*?) and (.*?) are not pointers to compatible types|pointers to incompatible types)",
[j]="(?:(.*?) and (.*?) are not pointers to compatible types|pointers to incompatible types)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{w,9078,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // Ensure Pointee types are compatible\n    if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n      if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{q,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}},
[k]={{w,9078,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // Ensure Pointee types are compatible\n    if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n      if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{r,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}},
[o]={
[o]={
["clang/test/CXX/over/over.built/p15.cpp"]={"clang/test/CXX/over/over.built/p15.cpp:6:13: error: \'int *\' and \'float *\' are not pointers to compatible types"}
["clang/test/CXX/over/over.built/p15.cpp"]={"clang/test/CXX/over/over.built/p15.cpp:6:13: error: \'int *\' and \'float *\' are not pointers to compatible types"}
Line 8,850: Line 8,869:
},
},
["err_typecheck_subscript_not_integer"]={
["err_typecheck_subscript_not_integer"]={
[i]="array subscript is not an integer",
[c]="array subscript is not an integer",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="array subscript is not an integer",
[g]="array subscript is not an integer",
[g]=n,
[i]=l,
[h]="array subscript is not an integer",
[j]="array subscript is not an integer",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"003af249275a",1240699855,"minor diagnostics improvements."},
[e]={"003af249275a",1240699855,"minor diagnostics improvements.","minor diagnostics improvements."},
[k]={{q,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1\n  if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{q,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  for (const OffsetOfComponent &OC : Components) {\n    if (OC.isBrackets) {\n      // The expression must be an integral expression.\n      // FIXME: An integral constant expression?\n      if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n        return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}},
[k]={{r,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1\n  if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{r,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  for (const OffsetOfComponent &OC : Components) {\n    if (OC.isBrackets) {\n      // The expression must be an integral expression.\n      // FIXME: An integral constant expression?\n      if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n        return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}},
[o]={
[o]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"}
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"}
Line 8,865: Line 8,884:
},
},
["err_typecheck_subscript_value"]={
["err_typecheck_subscript_value"]={
[i]="subscripted value is not an array, pointer, or vector",
[c]="subscripted value is not an array, pointer, or vector",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="subscripted value is not an array, pointer, or vector",
[g]="subscripted value is not an array, pointer, or vector",
[g]=n,
[i]=l,
[h]="subscripted value is not an array, pointer, or vector",
[j]="subscripted value is not an array, pointer, or vector",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n  } else if (LHSTy->isArrayType()) {\n  } else if (RHSTy->isArrayType()) {\n  } else {\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
[k]={{r,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n  } else if (LHSTy->isArrayType()) {\n  } else if (RHSTy->isArrayType()) {\n  } else {\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
[o]={
[o]={
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:20:17: error: subscripted value is not an array, pointer, or vector"}
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:20:17: error: subscripted value is not an array, pointer, or vector"}
Line 8,880: Line 8,899:
},
},
["err_typecheck_sve_rvv_ambiguous"]={
["err_typecheck_sve_rvv_ambiguous"]={
[i]="cannot combine fixed-length and sizeless ... vectors in expression, result is ambiguous (A and B)",
[c]="cannot combine fixed-length and sizeless ... vectors in expression, result is ambiguous (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[g]="cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[g]=n,
[i]=l,
[h]="cannot combine fixed\\-length and sizeless (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[j]="cannot combine fixed\\-length and sizeless (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{q,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
[k]={{r,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
[o]={
[o]={
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:131:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:132:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:141:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:144:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:150:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:153:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:159:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:162:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:168:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:171:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))"}
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:131:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:132:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:141:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:144:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:150:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:153:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:159:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:162:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:168:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:171:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))"}
Line 8,895: Line 8,914:
},
},
["err_typecheck_sve_rvv_gnu_ambiguous"]={
["err_typecheck_sve_rvv_gnu_ambiguous"]={
[i]="cannot combine GNU and ... vectors in expression, result is ambiguous (A and B)",
[c]="cannot combine GNU and ... vectors in expression, result is ambiguous (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[g]="cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[g]=n,
[i]=l,
[h]="cannot combine GNU and (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[j]="cannot combine GNU and (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{q,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
[k]={{r,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
[o]={
[o]={
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:134:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:135:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:137:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:138:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:142:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:145:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:147:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:148:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:151:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:154:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:156:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:157:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:160:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:163:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:165:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:166:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:169:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:172:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:174:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:175:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))"}
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:134:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:135:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:137:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:138:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:142:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:145:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:147:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:148:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:151:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:154:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:156:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:157:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:160:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:163:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:165:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:166:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:169:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:172:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:174:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:175:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))"}
Line 8,910: Line 8,929:
},
},
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
[i]="three-way comparison between pointer and zero",
[c]="three-way comparison between pointer and zero",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="three-way comparison between pointer and zero",
[g]="three-way comparison between pointer and zero",
[g]=n,
[i]=l,
[h]="three\\-way comparison between pointer and zero",
[j]="three\\-way comparison between pointer and zero",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[e]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles."},
[k]={{q,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  auto computeResultTy = [&]() {\n    if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n      Diag(Loc, diag::err_typecheck_three_way_comparison_of_pointer_and_zero) << (LHSIsNull ? LHS.get()->getSourceRange() : RHS.get()->getSourceRange());"}}
[k]={{r,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  auto computeResultTy = [&]() {\n    if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n      Diag(Loc, diag::err_typecheck_three_way_comparison_of_pointer_and_zero) << (LHSIsNull ? LHS.get()->getSourceRange() : RHS.get()->getSourceRange());"}}
},
},
["err_typecheck_unary_expr"]={
["err_typecheck_unary_expr"]={
[i]="invalid argument type A to unary expression",
[c]="invalid argument type A to unary expression",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="invalid argument type %0 to unary expression",
[g]="invalid argument type %0 to unary expression",
[g]=n,
[i]=l,
[h]="invalid argument type (.*?) to unary expression",
[j]="invalid argument type (.*?) to unary expression",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{q,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  if (getLangOpts().OpenCL) {\n    // The only legal unary operation for atomics is \'&\'.\n    if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{q,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Minus:\n    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n      if (!T->isIntegerType())\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    // WebAsembly tables can\'t be used in unary expressions.\n    if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n      // C99 6.5.3.3p1: ok, fallthrough;\n      if (Context.getLangOpts().CPlusPlus) {\n      } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n        // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n        // operate on scalar float types.\n        if (!resultType->isIntegerType() && !resultType->isPointerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n      if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n        if (!T->isIntegerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n      if (VTy->getVectorKind() != VectorType::GenericVector)\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{q,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}},
[k]={{r,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  if (getLangOpts().OpenCL) {\n    // The only legal unary operation for atomics is \'&\'.\n    if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{r,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Minus:\n    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n      if (!T->isIntegerType())\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    // WebAsembly tables can\'t be used in unary expressions.\n    if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n      // C99 6.5.3.3p1: ok, fallthrough;\n      if (Context.getLangOpts().CPlusPlus) {\n      } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n        // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n        // operate on scalar float types.\n        if (!resultType->isIntegerType() && !resultType->isPointerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n      if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n        if (!T->isIntegerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n      if (VTy->getVectorKind() != VectorType::GenericVector)\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}},
[o]={
[o]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:13:10: error: invalid argument type \'v2f\' (vector of 2 \'float\' values) to unary expression"}
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:13:10: error: invalid argument type \'v2f\' (vector of 2 \'float\' values) to unary expression"}
Line 8,937: Line 8,956:
},
},
["err_typecheck_vector_lengths_not_equal"]={
["err_typecheck_vector_lengths_not_equal"]={
[i]="vector operands do not have the same number of elements (A and B)",
[c]="vector operands do not have the same number of elements (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="vector operands do not have the same number of elements (%0 and %1)",
[g]="vector operands do not have the same number of elements (%0 and %1)",
[g]=n,
[i]=l,
[h]="vector operands do not have the same number of elements \\((.*?) and (.*?)\\)",
[j]="vector operands do not have the same number of elements \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[e]={"c65605d008dd",1423201495,Db,Db},
[k]={{q,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n    Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,12149,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSVecTy) {\n  } else if (RHSVecTy) {\n    // OpenCL v1.1 s6.3.j says that for vector types, the operators\n    // are applied component-wise. So if RHS is a vector, then ensure\n    // that the number of elements is the same as LHS...\n    if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSType->isVLSTBuiltinType()) {\n  } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n    if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[k]={{r,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n    Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,12149,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSVecTy) {\n  } else if (RHSVecTy) {\n    // OpenCL v1.1 s6.3.j says that for vector types, the operators\n    // are applied component-wise. So if RHS is a vector, then ensure\n    // that the number of elements is the same as LHS...\n    if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSType->isVLSTBuiltinType()) {\n  } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n    if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:82:11: error: vector operands do not have the same number of elements (\'vec16\' (vector of 4 \'unsigned int\' values) and \'vec8\' (vector of 2 \'unsigned int\' values))"}
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:82:11: error: vector operands do not have the same number of elements (\'vec16\' (vector of 4 \'unsigned int\' values) and \'vec8\' (vector of 2 \'unsigned int\' values))"}
Line 8,952: Line 8,971:
},
},
["err_typecheck_vector_not_convertable"]={
["err_typecheck_vector_not_convertable"]={
[i]="cannot convert between vector values of different size (A and B)",
[c]="cannot convert between vector values of different size (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot convert between vector values of different size (%0 and %1)",
[g]="cannot convert between vector values of different size (%0 and %1)",
[g]=n,
[i]=l,
[h]="cannot convert between vector values of different size \\((.*?) and (.*?)\\)",
[j]="cannot convert between vector values of different size \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{q,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}},
[k]={{r,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}},
[o]={
[o]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:25:10: error: cannot convert between vector values of different size (\'float3\' (vector of 3 \'float\' values) and \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/ext_vector_casts.c:26:10: error: cannot convert between vector values of different size (\'float4\' (vector of 4 \'float\' values) and \'float3\' (vector of 3 \'float\' values))","clang/test/Sema/ext_vector_casts.c:49:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/ext_vector_casts.c:107:11: error: cannot convert between vector values of different size (\'short8\' (vector of 8 \'short\' values) and \'float\')","clang/test/Sema/ext_vector_casts.c:111:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'double\')"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:25:10: error: cannot convert between vector values of different size (\'float3\' (vector of 3 \'float\' values) and \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/ext_vector_casts.c:26:10: error: cannot convert between vector values of different size (\'float4\' (vector of 4 \'float\' values) and \'float3\' (vector of 3 \'float\' values))","clang/test/Sema/ext_vector_casts.c:49:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/ext_vector_casts.c:107:11: error: cannot convert between vector values of different size (\'short8\' (vector of 8 \'short\' values) and \'float\')","clang/test/Sema/ext_vector_casts.c:111:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'double\')"}
Line 8,967: Line 8,986:
},
},
["err_typecheck_vector_not_convertable_implict_truncation"]={
["err_typecheck_vector_not_convertable_implict_truncation"]={
[i]="cannot convert between ... type A and vector type B as implicit conversion would cause truncation",
[c]="cannot convert between ... type A and vector type B as implicit conversion would cause truncation",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation",
[g]="cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation",
[g]=n,
[i]=l,
[h]="cannot convert between (?:scalar|vector) type (.*?) and vector type (.*?) as implicit conversion would cause truncation",
[j]="cannot convert between (?:scalar|vector) type (.*?) and vector type (.*?) as implicit conversion would cause truncation",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[e]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions"},
[k]={{q,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there is a vector type that is not a ExtVector and a scalar, we reach\n  // this point if scalar could not be converted to the vector\'s element type\n  // without truncation.\n  if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{q,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}},
[k]={{r,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there is a vector type that is not a ExtVector and a scalar, we reach\n  // this point if scalar could not be converted to the vector\'s element type\n  // without truncation.\n  if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{r,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}},
[o]={
[o]={
["clang/test/SemaCXX/vector-no-lax.cpp"]={"clang/test/SemaCXX/vector-no-lax.cpp:7:5: error: cannot convert between vector type \'vUInt32\' (vector of 4 \'unsigned int\' values) and vector type \'vSInt32\' (vector of 4 \'int\' values) as implicit conversion would cause truncation"}
["clang/test/SemaCXX/vector-no-lax.cpp"]={"clang/test/SemaCXX/vector-no-lax.cpp:7:5: error: cannot convert between vector type \'vUInt32\' (vector of 4 \'unsigned int\' values) and vector type \'vSInt32\' (vector of 4 \'int\' values) as implicit conversion would cause truncation"}
Line 8,982: Line 9,001:
},
},
["err_typecheck_vector_not_convertable_non_scalar"]={
["err_typecheck_vector_not_convertable_non_scalar"]={
[i]="cannot convert between vector and non-scalar values (A and B)",
[c]="cannot convert between vector and non-scalar values (A and B)",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="cannot convert between vector and non-scalar values (%0 and %1)",
[g]="cannot convert between vector and non-scalar values (%0 and %1)",
[g]=n,
[i]=l,
[h]="cannot convert between vector and non\\-scalar values \\((.*?) and (.*?)\\)",
[j]="cannot convert between vector and non\\-scalar values \\((.*?) and (.*?)\\)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"},
[e]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types","For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"},
[k]={{q,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there\'s a non-vector, non-real operand, diagnose that.\n  if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{q,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[k]={{r,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there\'s a non-vector, non-real operand, diagnose that.\n  if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:62:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')","clang/test/SemaCXX/vector-casts.cpp:65:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')"}
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:62:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')","clang/test/SemaCXX/vector-casts.cpp:65:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')"}
Line 8,997: Line 9,016:
},
},
["err_typecheck_wasm_table_must_have_zero_length"]={
["err_typecheck_wasm_table_must_have_zero_length"]={
[i]="only zero-length WebAssembly tables are currently supported",
[c]="only zero-length WebAssembly tables are currently supported",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="only zero-length WebAssembly tables are currently supported",
[g]="only zero-length WebAssembly tables are currently supported",
[g]=n,
[i]=l,
[h]="only zero\\-length WebAssembly tables are currently supported",
[j]="only zero\\-length WebAssembly tables are currently supported",
[b]=a,
[b]=a,
[j]=a,
[h]=a,
[c]={O,1625925174,L},
[e]={R,1625925174,B,B},
[k]={{u,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // WebAssembly tables must be static with a zero length and can\'t be\n  // declared within functions.\n  if (T->isWebAssemblyTableType()) {\n    if (!ATy || ATy->getSize().getSExtValue() != 0) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}},
[k]={{u,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // WebAssembly tables must be static with a zero length and can\'t be\n  // declared within functions.\n  if (T->isWebAssemblyTableType()) {\n    if (!ATy || ATy->getSize().getSExtValue() != 0) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}},
[o]={
[o]={
Line 9,012: Line 9,031:
},
},
["err_typecheck_zero_array_size"]={
["err_typecheck_zero_array_size"]={
[i]="zero-length arrays are not permitted in ...",
[c]="zero-length arrays are not permitted in ...",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="zero-length arrays are not permitted in %select{C++|SYCL device code}0",
[g]="zero-length arrays are not permitted in %select{C++|SYCL device code}0",
[g]=n,
[i]=l,
[h]="zero\\-length arrays are not permitted in (?:C\\+\\+|SYCL device code)",
[j]="zero\\-length arrays are not permitted in (?:C\\+\\+|SYCL device code)",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,"},
[e]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,","After performing template argument deduction for a function template,"},
[k]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    if (isZeroSizedArray(*this, TypeToCheck)) {\n      SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{G,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n        Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}},
[k]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    if (isZeroSizedArray(*this, TypeToCheck)) {\n      SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{K,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n        Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaSYCL/zero-length-arrays.cpp"]={M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,"clang/test/SemaSYCL/zero-length-arrays.cpp:69:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:70:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:14: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:16: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code"}
["clang/test/SemaSYCL/zero-length-arrays.cpp"]={S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,"clang/test/SemaSYCL/zero-length-arrays.cpp:69:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:70:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:14: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:16: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code"}
}
}
},
},
["err_typedef_changes_linkage"]={
["err_typedef_changes_linkage"]={
[i]="unsupported: anonymous type given name for linkage purposes by ... declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[c]="unsupported: anonymous type given name for linkage purposes by ... declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="unsupported: anonymous type given name for linkage purposes by %select{typedef|alias}0 declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[g]="unsupported: anonymous type given name for linkage purposes by %select{typedef|alias}0 declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[g]=n,
[i]=l,
[h]="unsupported\\: anonymous type given name for linkage purposes by (?:typedef|alias) declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[j]="unsupported\\: anonymous type given name for linkage purposes by (?:typedef|alias) declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change"},
[e]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change","Diagnose typedef names for linkage purposes that would change"},
[k]={{u,5015,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n        DiagID = diag::err_typedef_changes_linkage;"}},
[k]={{u,5015,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n        DiagID = diag::err_typedef_changes_linkage;"}},
[o]={
[o]={
Line 9,042: Line 9,061:
},
},
["err_typedef_not_bitfield"]={
["err_typedef_not_bitfield"]={
[i]="typedef member A cannot be a bit-field",
[c]="typedef member A cannot be a bit-field",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="typedef member %0 cannot be a bit-field",
[g]="typedef member %0 cannot be a bit-field",
[g]=n,
[i]=l,
[h]="typedef member (.*?) cannot be a bit\\-field",
[j]="typedef member (.*?) cannot be a bit\\-field",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={t,1237025389,s},
[e]={t,1237025389,q,q},
[k]={{z,3630,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n  } else {\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n      } else if (isa<TypedefDecl>(Member)) {\n        Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}},
[k]={{A,3630,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n  } else {\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n      } else if (isa<TypedefDecl>(Member)) {\n        Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}},
[o]={
[o]={
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"}
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"}
Line 9,057: Line 9,076:
},
},
["err_typedef_not_identifier"]={
["err_typedef_not_identifier"]={
[i]="typedef name must be an identifier",
[c]="typedef name must be an identifier",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="typedef name must be an identifier",
[g]="typedef name must be an identifier",
[g]=n,
[i]=l,
[h]="typedef name must be an identifier",
[j]="typedef name must be an identifier",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"},
[e]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462","Diagnose typedef of an operator name. Fixes PR7462"},
[k]={{u,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n    else\n      Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}},
[k]={{u,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n    else\n      Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}},
[o]={
[o]={
Line 9,072: Line 9,091:
},
},
["err_typename_identifiers_only"]={
["err_typename_identifiers_only"]={
[i]="typename is allowed for identifiers only",
[c]="typename is allowed for identifiers only",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="typename is allowed for identifiers only",
[g]="typename is allowed for identifiers only",
[g]=n,
[i]=l,
[h]="typename is allowed for identifiers only",
[j]="typename is allowed for identifiers only",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,"},
[e]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,","Diagnose attempts to use \'using typename\' with a non-identifier name,"},
[k]={{eb,830,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  while (true) {\n    if (InvalidDeclarator)\n    else {\n      // \"typename\" keyword is allowed for identifiers only,\n      // because it may be a type definition.\n      if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n        Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}},
[k]={{jb,830,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  while (true) {\n    if (InvalidDeclarator)\n    else {\n      // \"typename\" keyword is allowed for identifiers only,\n      // because it may be a type definition.\n      if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n        Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}},
[o]={
[o]={
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"}
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"}
Line 9,087: Line 9,106:
},
},
["err_typename_invalid_constexpr"]={
["err_typename_invalid_constexpr"]={
[i]="type name does not allow ... specifier to be specified",
[c]="type name does not allow ... specifier to be specified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type name does not allow %select{<ERROR>|constexpr|consteval|constinit}0 specifier to be specified",
[g]="type name does not allow %select{<ERROR>|constexpr|consteval|constinit}0 specifier to be specified",
[g]=n,
[i]=l,
[h]="type name does not allow (?:constexpr|consteval|constinit) specifier to be specified",
[j]="type name does not allow (?:constexpr|consteval|constinit) specifier to be specified",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"},
[e]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be","Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"},
[k]={{T,2688,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove constexpr specifier if present.\n  if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}},
[k]={{Y,2688,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove constexpr specifier if present.\n  if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}},
[o]={
[o]={
[Db]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:20:13: error: type name does not allow constexpr specifier to be specified"}
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:20:13: error: type name does not allow constexpr specifier to be specified"}
}
}
},
},
["err_typename_invalid_functionspec"]={
["err_typename_invalid_functionspec"]={
[i]="type name does not allow function specifier to be specified",
[c]="type name does not allow function specifier to be specified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type name does not allow function specifier to be specified",
[g]="type name does not allow function specifier to be specified",
[g]=n,
[i]=l,
[h]="type name does not allow function specifier to be specified",
[j]="type name does not allow function specifier to be specified",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{T,2676,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isInlineSpecified())\n      Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{T,2678,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isVirtualSpecified())\n      Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{T,2680,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.hasExplicitSpecifier())\n      Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{T,2682,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isNoreturnSpecified())\n      Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}},
[k]={{Y,2676,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isInlineSpecified())\n      Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2678,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isVirtualSpecified())\n      Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2680,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.hasExplicitSpecifier())\n      Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2682,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isNoreturnSpecified())\n      Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}},
[o]={
[o]={
[Db]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:14:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:15:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:16:13: error: type name does not allow function specifier to be specified"}
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:14:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:15:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:16:13: error: type name does not allow function specifier to be specified"}
}
}
},
},
["err_typename_invalid_storageclass"]={
["err_typename_invalid_storageclass"]={
[i]="type name does not allow storage class to be specified",
[c]="type name does not allow storage class to be specified",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="type name does not allow storage class to be specified",
[g]="type name does not allow storage class to be specified",
[g]=n,
[i]=l,
[h]="type name does not allow storage class to be specified",
[j]="type name does not allow storage class to be specified",
[b]=a,
[b]=a,
[j]=v,
[h]=v,
[c]={A,1236199783,B},
[e]={F,1236199783,E,D},
[k]={{T,2666,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n      Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{T,2669,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n    else\n      Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}},
[k]={{Y,2666,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n      Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{Y,2669,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n    else\n      Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}},
[o]={
[o]={
[Db]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:19:13: error: type name does not allow storage class to be specified"}
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:19:13: error: type name does not allow storage class to be specified"}
}
}
},
},
["err_typename_missing"]={
["err_typename_missing"]={
[i]="missing \'typename\' prior to dependent type name \'AB\'",
[c]="missing \'typename\' prior to dependent type name \'AB\'",
[d]=l,
[d]=n,
[e]=m,
[f]=m,
[f]="missing \'typename\' prior to dependent type name \'%0%1\'",
[g]="missing \'typename\' prior to dependent type name \'%0%1\'",
[g]=n,
[i]=l,
[h]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'",
[j]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'",
[b]=a,
[b]=a,
[j]=p,
[h]=p,
[c]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an"},
[e]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an","Improve diagnostics when the parser encounters a declarator with an"},
[k]={{u,819,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n  else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n  } else if (isDependentScopeSpecifier(*SS)) {\n    unsigned DiagID = diag::err_typename_missing;"},{q,2878,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n    unsigned DiagID = diag::err_typename_missing;"}},
[k]={{u,819,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n  else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n  } else if (isDependentScopeSpecifier(*SS)) {\n    unsigned DiagID = diag::err_typename_missing;"},{r,2878,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n    unsigned DiagID = diag::err_typename_missing;"}},
[o]={
[o]={
["clang/test/SemaCXX/PR11358.cpp"]={"clang/test/SemaCXX/PR11358.cpp:15:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'","clang/test/SemaCXX/PR11358.cpp:31:10: error: missing \'typename\' prior to dependent type name \'hash_map<KeyType, ValueType>::const_iterator\'","clang/test/SemaCXX/PR11358.cpp:47:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'"}
["clang/test/SemaCXX/PR11358.cpp"]={"clang/test/SemaCXX/PR11358.cpp:15:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'","clang/test/SemaCXX/PR11358.cpp:31:10: error: missing \'typename\' prior to dependent type name \'hash_map<KeyType, ValueType>::const_iterator\'","clang/test/SemaCXX/PR11358.cpp:47:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'"}
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