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="regex2";
local b="regex3";
local c="commit";
local c="commit";
local d="prefix";
local d="prefix";
Line 6: Line 6:
local f="message";
local f="message";
local g="regex1";
local g="regex1";
local h="regex3";
local h="regex2";
local i="title";
local i="title";
local j="category";
local j="category";
Line 13: Line 13:
local m="Error";
local m="Error";
local n="(?:error|fatal error)\\: ";
local n="(?:error|fatal error)\\: ";
local o="Semantic Issue";
local o="tests2";
local p="clang/lib/Sema/SemaExpr.cpp";
local p="Semantic Issue";
local q="clang/lib/Sema/SemaTemplate.cpp";
local q="clang/lib/Sema/SemaExpr.cpp";
local r="5a8987ca5113";
local r="clang/lib/Sema/SemaTemplate.cpp";
local s="Update tablegen diagnostic files to be in sync with the def files.";
local s="Update tablegen diagnostic files to be in sync with the def files.";
local t="clang/lib/Sema/SemaDecl.cpp";
local t="5a8987ca5113";
local u="Parse Issue";
local u="clang/lib/Sema/SemaDecl.cpp";
local v="clang/lib/Sema/SemaChecking.cpp";
local v="Parse Issue";
local w="clang/lib/Parse/ParsePragma.cpp";
local w="clang/lib/Sema/SemaChecking.cpp";
local x="Lexical or Preprocessor Issue";
local x="clang/lib/Parse/ParsePragma.cpp";
local y="clang/lib/Sema/SemaDeclCXX.cpp";
local y="Lexical or Preprocessor Issue";
local z="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local z="clang/lib/Sema/SemaDeclCXX.cpp";
local A="b1c4d5507fad";
local A="b1c4d5507fad";
local B="clang/lib/Sema/SemaAttr.cpp";
local B="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local C="clang/lib/Lex/PPDirectives.cpp";
local C="clang/lib/Sema/SemaAttr.cpp";
local D="clang/lib/Sema/SemaInit.cpp";
local D="clang/lib/Lex/PPDirectives.cpp";
local E="clang/lib/Sema/SemaExprCXX.cpp";
local E="clang/lib/Sema/SemaInit.cpp";
local F="clang/lib/Sema/SemaType.cpp";
local F="clang/lib/Sema/SemaExprCXX.cpp";
local G="931fcd3ba011";
local G="clang/lib/Sema/SemaType.cpp";
local H="[WebAssembly] Improve clang diagnostics for wasm attributes";
local H="931fcd3ba011";
local I="clang/lib/Sema/SemaExprMember.cpp";
local I="[WebAssembly] Improve clang diagnostics for wasm attributes";
local J="clang/lib/Lex/Pragma.cpp";
local J="clang/lib/Sema/SemaExprMember.cpp";
local K="clang/lib/Sema/SemaStmt.cpp";
local K="clang/lib/Lex/Pragma.cpp";
local L="Implement P2361 Unevaluated string literals";
local L="Implement P2361 Unevaluated string literals";
local M="95f50964fbf5";
local M="clang/test/SemaSYCL/zero-length-arrays.cpp:9:3: error: zero-length arrays are not permitted in SYCL device code";
local N="Add #pragma clang attribute";
local N="clang/lib/Sema/SemaStmt.cpp";
local O="clang/lib/Sema/SemaDeclAttr.cpp";
local O="95f50964fbf5";
local P="0a849f47d2f7";
local P="0a849f47d2f7";
local Q="clang/lib/Sema/SemaObjCProperty.cpp";
local Q="clang/lib/Sema/SemaDeclAttr.cpp";
local R="clang/lib/Parse/ParseDecl.cpp";
local R="Add #pragma clang attribute";
local S="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local S="clang/lib/Sema/SemaObjCProperty.cpp";
local T="14f6bfcb52e7";
local T="clang/lib/Parse/ParseDecl.cpp";
local U="f881267db9a9";
local U="14f6bfcb52e7";
local V="Mass-rename the handful of error_* diagnostics to err_*.";
local V="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local W="61d065e21ff3";
local W="clang/test/Parser/pragma-attribute.cpp";
local X="Let clang atomic builtins fetch add/sub support floating point types";
local X="Mass-rename the handful of error_* diagnostics to err_*.";
local Y="clang/lib/Sema/SemaDeclObjC.cpp";
local Y="f881267db9a9";
local Z="clang/lib/Parse/Parser.cpp";
local Z="clang/lib/Sema/SemaDeclObjC.cpp";
local ab="clang/lib/Sema/SemaOverload.cpp";
local ab="Let clang atomic builtins fetch add/sub support floating point types";
local bb="clang/lib/Parse/ParseDeclCXX.cpp";
local bb="61d065e21ff3";
local cb="clang/lib/Parse/ParseExprCXX.cpp";
local cb="clang/lib/Parse/Parser.cpp";
local db="clang/lib/Sema/SemaExprObjC.cpp";
local db="clang/lib/Sema/SemaOverload.cpp";
local eb="clang/lib/Sema/SemaCast.cpp";
local eb="clang/lib/Parse/ParseDeclCXX.cpp";
local fb="739b410f1ff5";
local fb="clang/lib/Sema/SemaExprObjC.cpp";
local gb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
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 hb="clang/lib/Sema/Sema.cpp";
local hb="clang/lib/Parse/ParseExprCXX.cpp";
local ib="Refactoring Invocation Issue";
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 jb="clang/lib/Lex/PPMacroExpansion.cpp";
local jb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local kb="6d485ff455ea";
local kb="739b410f1ff5";
local lb="Improve static checks for sprintf and __builtin___sprintf_chk";
local lb="clang/lib/Sema/SemaCast.cpp";
local mb="clang/lib/Parse/ParseStmt.cpp";
local mb="clang/lib/Sema/Sema.cpp";
local nb="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local nb="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local ob="clang/lib/Basic/Targets.cpp";
local ob="clang/lib/Lex/PPMacroExpansion.cpp";
local pb="3dbcea8b957a";
local pb="clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp";
local qb="f60dc3caa673";
local qb="Refactoring Invocation Issue";
local rb="clang/lib/Parse/ParseTemplate.cpp";
local rb="clang/lib/Parse/ParseStmt.cpp";
local sb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local sb="6d485ff455ea";
local tb="f9c3310d32c6";
local tb="Improve static checks for sprintf and __builtin___sprintf_chk";
local ub="Reland [clang] Check unsupported types in expressions";
local ub="d13863008b38";
local vb="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
local vb="clang/lib/Sema/SemaLambda.cpp";
local wb="d13863008b38";
local wb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local xb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local xb="clang/test/Preprocessor/line-directive.c";
local yb="clang/lib/Sema/SemaLambda.cpp";
local yb="3dbcea8b957a";
local zb="Reimplement reference initialization (C++ [dcl.init.ref]) using the";
local zb="Reland [clang] Check unsupported types in expressions";
local Ab="3e1e52782604";
local Ab="3e1e52782604";
local Bb="Reimplement reference initialization (C++ [dcl.init.ref]) using the";
local Cb="clang/lib/Parse/ParseTemplate.cpp";
local Db="clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp";
local Eb="clang/lib/Basic/Targets.cpp";
local Fb="f9c3310d32c6";
local Gb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local Hb="f60dc3caa673";
local Ib="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local Jb="clang/test/SemaCXX/exceptions.cpp";
local Kb="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";


return {
return {
Line 86: Line 96:
[f]="main file cannot be included recursively when building a preamble",
[f]="main file cannot be included recursively when building a preamble",
[g]=n,
[g]=n,
[b]="main file cannot be included recursively when building a preamble",
[h]="main file cannot be included recursively when building a preamble",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble"},
[c]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble"},
[k]={{C,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]={{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);"}}
},
},
["err_pp_invalid_directive"]={
["err_pp_invalid_directive"]={
Line 98: Line 108:
[f]="invalid preprocessing directive%select{|, did you mean \'#%1\'?}0",
[f]="invalid preprocessing directive%select{|, did you mean \'#%1\'?}0",
[g]=n,
[g]=n,
[b]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[h]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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;"}},
[o]={
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"}
}
},
},
["err_pp_invalid_poison"]={
["err_pp_invalid_poison"]={
Line 110: Line 123:
[f]="can only poison identifier tokens",
[f]="can only poison identifier tokens",
[g]=n,
[g]=n,
[b]="can only poison identifier tokens",
[h]="can only poison identifier tokens",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{J,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]={{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);"}}
},
},
["err_pp_invalid_tok_in_arg_list"]={
["err_pp_invalid_tok_in_arg_list"]={
Line 122: Line 135:
[f]="invalid token in macro parameter list",
[f]="invalid token in macro parameter list",
[g]=n,
[g]=n,
[b]="invalid token in macro parameter list",
[h]="invalid token in macro parameter list",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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);"}}
},
},
["err_pp_invalid_udl"]={
["err_pp_invalid_udl"]={
Line 134: Line 147:
[f]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[f]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[g]=n,
[g]=n,
[b]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[h]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and"},
[c]={"39570d00201c",1331196332,"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]={
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"}
}
},
},
["err_pp_line_digit_sequence"]={
["err_pp_line_digit_sequence"]={
Line 146: Line 162:
[f]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[f]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[g]=n,
[g]=n,
[b]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[h]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted"},
[c]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted"},
[k]={{C,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]={{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;"}},
[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"}
}
},
},
["err_pp_line_invalid_filename"]={
["err_pp_line_invalid_filename"]={
Line 158: Line 177:
[f]="invalid filename for #line directive",
[f]="invalid filename for #line directive",
[g]=n,
[g]=n,
[b]="invalid filename for \\#line directive",
[h]="invalid filename for \\#line directive",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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);"}},
[o]={
[xb]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
}
},
},
["err_pp_line_requires_integer"]={
["err_pp_line_requires_integer"]={
Line 170: Line 192:
[f]="#line directive requires a positive integer argument",
[f]="#line directive requires a positive integer argument",
[g]=n,
[g]=n,
[b]="\\#line directive requires a positive integer argument",
[h]="\\#line directive requires a positive integer argument",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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))"}},
[o]={
[xb]={"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"]={
Line 182: Line 207:
[f]="invalid filename for line marker directive",
[f]="invalid filename for line marker directive",
[g]=n,
[g]=n,
[b]="invalid filename for line marker directive",
[h]="invalid filename for line marker directive",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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);"},{C,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);"},{C,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]={{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);"}},
[o]={
[xb]={"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"]={
Line 194: Line 222:
[f]="invalid flag line marker directive",
[f]="invalid flag line marker directive",
[g]=n,
[g]=n,
[b]="invalid flag line marker directive",
[h]="invalid flag line marker directive",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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))"},{C,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))"},{C,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))"},{C,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);"},{C,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))"},{C,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);"},{C,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]={{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);"}},
[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"}
}
},
},
["err_pp_linemarker_invalid_pop"]={
["err_pp_linemarker_invalid_pop"]={
Line 206: Line 237:
[f]="invalid line marker flag \'2\': cannot pop empty include stack",
[f]="invalid line marker flag \'2\': cannot pop empty include stack",
[g]=n,
[g]=n,
[b]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[h]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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);"}},
[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"}
}
},
},
["err_pp_linemarker_requires_integer"]={
["err_pp_linemarker_requires_integer"]={
Line 218: Line 252:
[f]="line marker directive requires a positive integer argument",
[f]="line marker directive requires a positive integer argument",
[g]=n,
[g]=n,
[b]="line marker directive requires a positive integer argument",
[h]="line marker directive requires a positive integer argument",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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))"}}
},
},
["err_pp_macro_not_identifier"]={
["err_pp_macro_not_identifier"]={
Line 230: Line 264:
[f]="macro name must be an identifier",
[f]="macro name must be an identifier",
[g]=n,
[g]=n,
[b]="macro name must be an identifier",
[h]="macro name must be an identifier",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}}
[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);"}},
[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"}
}
},
},
["err_pp_malformed_ident"]={
["err_pp_malformed_ident"]={
Line 242: Line 279:
[f]="invalid #ident directive",
[f]="invalid #ident directive",
[g]=n,
[g]=n,
[b]="invalid \\#ident directive",
[h]="invalid \\#ident directive",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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);"}}
},
},
["err_pp_missing_lparen_in_vaopt_use"]={
["err_pp_missing_lparen_in_vaopt_use"]={
Line 254: Line 291:
[f]="missing \'(\' following __VA_OPT__",
[f]="missing \'(\' following __VA_OPT__",
[g]=n,
[g]=n,
[b]="missing \'\\(\' following __VA_OPT__",
[h]="missing \'\\(\' following __VA_OPT__",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[k]={{C,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]={{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);"}},
[o]={
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"}
}
},
},
["err_pp_missing_macro_name"]={
["err_pp_missing_macro_name"]={
Line 266: Line 306:
[f]="macro name missing",
[f]="macro name missing",
[g]=n,
[g]=n,
[b]="macro name missing",
[h]="macro name missing",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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);"}},
[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"}
}
},
},
["err_pp_missing_rparen_in_macro_def"]={
["err_pp_missing_rparen_in_macro_def"]={
Line 278: Line 321:
[f]="missing \')\' in macro parameter list",
[f]="missing \')\' in macro parameter list",
[g]=n,
[g]=n,
[b]="missing \'\\)\' in macro parameter list",
[h]="missing \'\\)\' in macro parameter list",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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);"},{C,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);"},{C,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]={{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);"}}
},
},
["err_pp_module_begin_no_module_map"]={
["err_pp_module_begin_no_module_map"]={
Line 290: Line 333:
[f]="no module map available for module %0",
[f]="no module map available for module %0",
[g]=n,
[g]=n,
[b]="no module map available for module (.*?)",
[h]="no module map available for module (.*?)",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={wb,1493857794,xb},
[c]={ub,1493857794,wb},
[k]={{J,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]={{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;"}}
},
},
["err_pp_module_begin_no_submodule"]={
["err_pp_module_begin_no_submodule"]={
Line 302: Line 345:
[f]="submodule %0.%1 not declared in module map",
[f]="submodule %0.%1 not declared in module map",
[g]=n,
[g]=n,
[b]="submodule (.*?)\\.(.*?) not declared in module map",
[h]="submodule (.*?)\\.(.*?) not declared in module map",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={wb,1493857794,xb},
[c]={ub,1493857794,wb},
[k]={{J,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]={{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;"}}
},
},
["err_pp_module_begin_without_module_end"]={
["err_pp_module_begin_without_module_end"]={
Line 314: Line 357:
[f]="no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'",
[f]="no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'",
[g]=n,
[g]=n,
[b]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[h]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={wb,1493857794,xb},
[c]={ub,1493857794,wb},
[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]={
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}
}
},
},
["err_pp_module_begin_wrong_module"]={
["err_pp_module_begin_wrong_module"]={
Line 326: Line 372:
[f]="must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2",
[f]="must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2",
[g]=n,
[g]=n,
[b]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[h]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={wb,1493857794,xb},
[c]={ub,1493857794,wb},
[k]={{J,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]={{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;"}}
},
},
["err_pp_module_build_missing_end"]={
["err_pp_module_build_missing_end"]={
Line 338: Line 384:
[f]="no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'",
[f]="no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'",
[g]=n,
[g]=n,
[b]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[h]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build"},
[c]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build"},
[k]={{J,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]={{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);"}},
[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\'"}
}
},
},
["err_pp_module_end_without_module_begin"]={
["err_pp_module_end_without_module_begin"]={
Line 350: Line 399:
[f]="no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'",
[f]="no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'",
[g]=n,
[g]=n,
[b]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[h]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={wb,1493857794,xb},
[c]={ub,1493857794,wb},
[k]={{J,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]={{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);"}},
[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\'"}
}
},
},
["err_pp_nested_paren"]={
["err_pp_nested_paren"]={
Line 362: Line 414:
[f]="nested parentheses not permitted in %0",
[f]="nested parentheses not permitted in %0",
[g]=n,
[g]=n,
[b]="nested parentheses not permitted in (.*?)",
[h]="nested parentheses not permitted in (.*?)",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros"},
[c]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros"},
[k]={{jb,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]={{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;"}},
[o]={
["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"}
}
},
},
["err_pp_operator_used_as_macro_name"]={
["err_pp_operator_used_as_macro_name"]={
Line 374: Line 429:
[f]="C++ operator %0 (aka %1) used as a macro name",
[f]="C++ operator %0 (aka %1) used as a macro name",
[g]=n,
[g]=n,
[b]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[h]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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();"}},
[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"}
}
},
},
["err_pp_pragma_hdrstop_not_seen"]={
["err_pp_pragma_hdrstop_not_seen"]={
Line 386: Line 444:
[f]="#pragma hdrstop not seen while attempting to use precompiled header",
[f]="#pragma hdrstop not seen while attempting to use precompiled header",
[g]="fatal error\\: ",
[g]="fatal error\\: ",
[b]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[h]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"},
[c]={"58df1affedc0",1536685844,"[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);"}}
Line 398: Line 456:
[f]="Expected \'begin\' or \'end\'",
[f]="Expected \'begin\' or \'end\'",
[g]=n,
[g]=n,
[b]="Expected \'begin\' or \'end\'",
[h]="Expected \'begin\' or \'end\'",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{J,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);"},{J,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]={{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);"}},
[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\'"}
}
},
},
["err_pp_remainder_by_zero"]={
["err_pp_remainder_by_zero"]={
Line 410: Line 471:
[f]="remainder by zero in preprocessor expression",
[f]="remainder by zero in preprocessor expression",
[g]=n,
[g]=n,
[b]="remainder by zero in preprocessor expression",
[h]="remainder by zero in preprocessor expression",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[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();"}}
},
},
Line 422: Line 483:
[f]="\'%select{#|#@}0\' is not followed by a macro parameter",
[f]="\'%select{#|#@}0\' is not followed by a macro parameter",
[g]=n,
[g]=n,
[b]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[h]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{C,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]={{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);"}},
[o]={
["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"}
}
},
},
["err_pp_through_header_not_found"]={
["err_pp_through_header_not_found"]={
Line 434: Line 498:
[f]="\'%0\' required for precompiled header not found",
[f]="\'%0\' required for precompiled header not found",
[g]="fatal error\\: ",
[g]="fatal error\\: ",
[b]="\'(.*?)\' required for precompiled header not found",
[h]="\'(.*?)\' required for precompiled header not found",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[c]={"76675de15cfc",1530811333,"[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;"}}
Line 446: Line 510:
[f]="#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header",
[f]="#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header",
[g]="fatal error\\: ",
[g]="fatal error\\: ",
[b]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[h]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[c]={"76675de15cfc",1530811333,"[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;"}}
Line 458: Line 522:
[f]="\'#pragma unsafe_buffer_usage\' was not ended",
[f]="\'#pragma unsafe_buffer_usage\' was not ended",
[g]=n,
[g]=n,
[b]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[h]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[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]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"}
}
},
},
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
Line 470: Line 537:
[f]="not currently inside \'#pragma unsafe_buffer_usage\'",
[f]="not currently inside \'#pragma unsafe_buffer_usage\'",
[g]=n,
[g]=n,
[b]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[h]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{J,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]={{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);"}},
[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\'"}
}
},
},
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
Line 482: Line 552:
[f]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[f]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[g]=n,
[g]=n,
[b]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[h]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[c]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[k]={{J,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]={{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);"}},
[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\'"}
}
},
},
["err_pp_unmatched_end_of_assume_nonnull"]={
["err_pp_unmatched_end_of_assume_nonnull"]={
Line 494: Line 567:
[f]="not currently inside \'#pragma clang assume_nonnull\'",
[f]="not currently inside \'#pragma clang assume_nonnull\'",
[g]=n,
[g]=n,
[b]="not currently inside \'\\#pragma clang assume_nonnull\'",
[h]="not currently inside \'\\#pragma clang assume_nonnull\'",
[h]=a,
[b]=a,
[j]="Nullability Issue",
[j]="Nullability Issue",
[c]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions."},
[c]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions."},
[k]={{J,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]={{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);"}}
},
},
["err_pp_unterminated_conditional"]={
["err_pp_unterminated_conditional"]={
Line 506: Line 579:
[f]="unterminated conditional directive",
[f]="unterminated conditional directive",
[g]=n,
[g]=n,
[b]="unterminated conditional directive",
[h]="unterminated conditional directive",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[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]={
["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"}
}
},
},
["err_pp_used_poisoned_id"]={
["err_pp_used_poisoned_id"]={
Line 518: Line 594:
[f]="attempt to use a poisoned identifier",
[f]="attempt to use a poisoned identifier",
[g]=n,
[g]=n,
[b]="attempt to use a poisoned identifier",
[h]="attempt to use a poisoned identifier",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[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]={
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"}
}
},
},
["err_pp_vaopt_nested_use"]={
["err_pp_vaopt_nested_use"]={
Line 530: Line 609:
[f]="__VA_OPT__ cannot be nested within its own replacement tokens",
[f]="__VA_OPT__ cannot be nested within its own replacement tokens",
[g]=n,
[g]=n,
[b]="__VA_OPT__ cannot be nested within its own replacement tokens",
[h]="__VA_OPT__ cannot be nested within its own replacement tokens",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[k]={{C,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]={{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);"}},
[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"}
}
},
},
["err_pp_visibility_non_macro"]={
["err_pp_visibility_non_macro"]={
Line 542: Line 624:
[f]="no macro named %0",
[f]="no macro named %0",
[g]=n,
[g]=n,
[b]="no macro named (.*?)",
[h]="no macro named (.*?)",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly"},
[c]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly"},
[k]={{C,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;"},{C,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;"},{J,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;"},{J,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]={{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;"}},
[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\'"}
}
},
},
["err_ppc_builtin_requires_abi"]={
["err_ppc_builtin_requires_abi"]={
Line 554: Line 639:
[f]="this builtin requires ABI -mabi=%0",
[f]="this builtin requires ABI -mabi=%0",
[g]=n,
[g]=n,
[b]="this builtin requires ABI \\-mabi\\=(.*?)",
[h]="this builtin requires ABI \\-mabi\\=(.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={tb,1616787805,sb},
[c]={Fb,1616787805,Gb},
[k]={{v,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"]={
Line 566: Line 651:
[f]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[f]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[g]=n,
[g]=n,
[b]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[h]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={pb,1615397021,ub},
[c]={yb,1615397021,zb},
[k]={{v,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]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"}
}
},
},
["err_ppc_invalid_use_mma_type"]={
["err_ppc_invalid_use_mma_type"]={
Line 578: Line 666:
[f]="invalid use of PPC MMA type",
[f]="invalid use of PPC MMA type",
[g]=n,
[g]=n,
[b]="invalid use of PPC MMA type",
[h]="invalid use of PPC MMA type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{v,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]={
["clang/test/Sema/ppc-pair-mma-types.c"]={"clang/test/Sema/ppc-pair-mma-types.c:17:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:22:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:27:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:33:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:35:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:38:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:40:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:44:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:45:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:48:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:55:17: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:112:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:117:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:122:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:128:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:130:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:133:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:135:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:139:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:140:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:143:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:149:17: error: invalid use of PPC MMA type"}
}
},
},
["err_pragma_alloc_text_c_linkage"]={
["err_pragma_alloc_text_c_linkage"]={
Line 590: Line 681:
[f]="\'#pragma alloc_text\' is applicable only to functions with C linkage",
[f]="\'#pragma alloc_text\' is applicable only to functions with C linkage",
[g]=n,
[g]=n,
[b]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[h]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_alloc_text_not_function"]={
["err_pragma_alloc_text_not_function"]={
Line 602: Line 696:
[f]="\'#pragma alloc_text\' is applicable only to functions",
[f]="\'#pragma alloc_text\' is applicable only to functions",
[g]=n,
[g]=n,
[b]="\'\\#pragma alloc_text\' is applicable only to functions",
[h]="\'\\#pragma alloc_text\' is applicable only to functions",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_attr_attr_no_push"]={
["err_pragma_attr_attr_no_push"]={
Line 614: Line 711:
[f]="\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'",
[f]="\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'",
[g]=n,
[g]=n,
[b]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[h]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[k]={{B,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]={{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);"}},
[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\'"}
}
},
},
["err_pragma_attribute_duplicate_subject"]={
["err_pragma_attribute_duplicate_subject"]={
Line 626: Line 726:
[f]="duplicate attribute subject matcher \'%0\'",
[f]="duplicate attribute subject matcher \'%0\'",
[g]=n,
[g]=n,
[b]="duplicate attribute subject matcher \'(.*?)\'",
[h]="duplicate attribute subject matcher \'(.*?)\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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));"},{w,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]={
[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))\'"}
}
},
},
["err_pragma_attribute_expected_attribute"]={
["err_pragma_attribute_expected_attribute"]={
Line 638: Line 741:
[f]="expected an attribute after \'(\'",
[f]="expected an attribute after \'(\'",
[g]=n,
[g]=n,
[b]="expected an attribute after \'\\(\'",
[h]="expected an attribute after \'\\(\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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 \'(\'"}
}
},
},
["err_pragma_attribute_expected_attribute_name"]={
["err_pragma_attribute_expected_attribute_name"]={
Line 650: Line 756:
[f]="expected identifier that represents an attribute name",
[f]="expected identifier that represents an attribute name",
[g]=n,
[g]=n,
[b]="expected identifier that represents an attribute name",
[h]="expected identifier that represents an attribute name",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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"}
}
},
},
["err_pragma_attribute_expected_attribute_syntax"]={
["err_pragma_attribute_expected_attribute_syntax"]={
Line 662: Line 771:
[f]="expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax",
[f]="expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax",
[g]=n,
[g]=n,
[b]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[h]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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"}
}
},
},
["err_pragma_attribute_expected_period"]={
["err_pragma_attribute_expected_period"]={
Line 674: Line 786:
[f]="expected \'.\' after pragma attribute namespace %0",
[f]="expected \'.\' after pragma attribute namespace %0",
[g]=n,
[g]=n,
[b]="expected \'\\.\' after pragma attribute namespace (.*?)",
[h]="expected \'\\.\' after pragma attribute namespace (.*?)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[k]={{w,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]={
[W]={"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"]={
Line 686: Line 801:
[f]="expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'",
[f]="expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'",
[g]=n,
[g]=n,
[b]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[h]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[k]={{w,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]={
[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\'"}
}
},
},
["err_pragma_attribute_expected_subject_identifier"]={
["err_pragma_attribute_expected_subject_identifier"]={
Line 698: Line 816:
[f]="expected an identifier that corresponds to an attribute subject rule",
[f]="expected an identifier that corresponds to an attribute subject rule",
[g]=n,
[g]=n,
[b]="expected an identifier that corresponds to an attribute subject rule",
[h]="expected an identifier that corresponds to an attribute subject rule",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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"}
}
},
},
["err_pragma_attribute_expected_subject_sub_identifier"]={
["err_pragma_attribute_expected_subject_sub_identifier"]={
Line 710: Line 831:
[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",
[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]=n,
[g]=n,
[b]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[h]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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"}
}
},
},
["err_pragma_attribute_extra_tokens_after_attribute"]={
["err_pragma_attribute_extra_tokens_after_attribute"]={
Line 722: Line 846:
[f]="extra tokens after attribute in a \'#pragma clang attribute push\'",
[f]="extra tokens after attribute in a \'#pragma clang attribute push\'",
[g]=n,
[g]=n,
[b]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[h]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[W]={"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"]={
Line 734: Line 861:
[f]="unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'",
[f]="unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'",
[g]=n,
[g]=n,
[b]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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"]={
Line 746: Line 873:
[f]="attribute %0 can\'t be applied to %1",
[f]="attribute %0 can\'t be applied to %1",
[g]=n,
[g]=n,
[b]="attribute (.*?) can\'t be applied to (.*?)",
[h]="attribute (.*?) can\'t be applied to (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{B,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]={{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;"}},
[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))\'"}
}
},
},
["err_pragma_attribute_invalid_subject_set_specifier"]={
["err_pragma_attribute_invalid_subject_set_specifier"]={
Line 758: Line 888:
[f]="expected attribute subject set specifier \'apply_to\'",
[f]="expected attribute subject set specifier \'apply_to\'",
[g]=n,
[g]=n,
[b]="expected attribute subject set specifier \'apply_to\'",
[h]="expected attribute subject set specifier \'apply_to\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,1922,"void Parser::HandlePragmaAttribute() {\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{w,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]={
[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\'"}
}
},
},
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
Line 770: Line 903:
[f]="negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'",
[f]="negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'",
[g]=n,
[g]=n,
[b]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[h]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{B,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]={{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));"}},
[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)\'"}
}
},
},
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
Line 782: Line 918:
[f]="redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations",
[f]="redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations",
[g]=n,
[g]=n,
[b]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[h]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{B,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]={{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));"}},
[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"}
}
},
},
["err_pragma_attribute_namespace_on_attribute"]={
["err_pragma_attribute_namespace_on_attribute"]={
Line 794: Line 933:
[f]="namespace can only apply to \'push\' or \'pop\' directives",
[f]="namespace can only apply to \'push\' or \'pop\' directives",
[g]=n,
[g]=n,
[b]="namespace can only apply to \'push\' or \'pop\' directives",
[h]="namespace can only apply to \'push\' or \'pop\' directives",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[k]={{w,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]={
["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"}
}
},
},
["err_pragma_attribute_no_pop_eof"]={
["err_pragma_attribute_no_pop_eof"]={
Line 806: Line 948:
[f]="unterminated \'#pragma clang attribute push\' at end of file",
[f]="unterminated \'#pragma clang attribute push\' at end of file",
[g]=n,
[g]=n,
[b]="unterminated \'\\#pragma clang attribute push\' at end of file",
[h]="unterminated \'\\#pragma clang attribute push\' at end of file",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{B,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}}
[k]={{C,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
[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"}
}
},
},
["err_pragma_attribute_stack_mismatch"]={
["err_pragma_attribute_stack_mismatch"]={
Line 818: Line 963:
[f]="\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'",
[f]="\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'",
[g]=n,
[g]=n,
[b]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[h]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{B,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{B,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{B,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]={{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;"}},
[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\'"}
}
},
},
["err_pragma_attribute_unknown_subject_rule"]={
["err_pragma_attribute_unknown_subject_rule"]={
Line 830: Line 978:
[f]="unknown attribute subject rule \'%0\'",
[f]="unknown attribute subject rule \'%0\'",
[g]=n,
[g]=n,
[b]="unknown attribute subject rule \'(.*?)\'",
[h]="unknown attribute subject rule \'(.*?)\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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\'"}
}
},
},
["err_pragma_attribute_unknown_subject_sub_rule"]={
["err_pragma_attribute_unknown_subject_sub_rule"]={
Line 842: Line 993:
[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",
[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]=n,
[g]=n,
[b]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[h]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
[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"}
}
},
},
["err_pragma_attribute_unsupported_attribute"]={
["err_pragma_attribute_unsupported_attribute"]={
Line 854: Line 1,008:
[f]="attribute %0 is not supported by \'#pragma clang attribute\'",
[f]="attribute %0 is not supported by \'#pragma clang attribute\'",
[g]=n,
[g]=n,
[b]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[h]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={P,1492508507,N},
[c]={P,1492508507,R},
[k]={{w,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]={
["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"}
}
},
},
["err_pragma_cannot_end_force_cuda_host_device"]={
["err_pragma_cannot_end_force_cuda_host_device"]={
Line 866: Line 1,023:
[f]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[f]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[g]=n,
[g]=n,
[b]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[h]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."},
[c]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."},
[k]={{w,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"]={
Line 878: Line 1,035:
[f]="expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'",
[f]="expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'",
[g]=n,
[g]=n,
[b]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[h]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[k]={{w,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]={
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"}
}
},
},
["err_pragma_comment_malformed"]={
["err_pragma_comment_malformed"]={
Line 890: Line 1,050:
[f]="pragma comment requires parenthesized identifier and optional string",
[f]="pragma comment requires parenthesized identifier and optional string",
[g]=n,
[g]=n,
[b]="pragma comment requires parenthesized identifier and optional string",
[h]="pragma comment requires parenthesized identifier and optional string",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{w,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);"},{w,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);"},{w,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);"},{w,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]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"}
}
},
},
["err_pragma_comment_unknown_kind"]={
["err_pragma_comment_unknown_kind"]={
Line 902: Line 1,065:
[f]="unknown kind of pragma comment",
[f]="unknown kind of pragma comment",
[g]=n,
[g]=n,
[b]="unknown kind of pragma comment",
[h]="unknown kind of pragma comment",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{w,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]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"}
}
},
},
["err_pragma_detect_mismatch_malformed"]={
["err_pragma_detect_mismatch_malformed"]={
Line 914: Line 1,080:
[f]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[f]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[g]=n,
[g]=n,
[b]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[h]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co..."},
[c]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co..."},
[k]={{w,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);"},{w,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]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"}
}
},
},
["err_pragma_expected_clang_section_name"]={
["err_pragma_expected_clang_section_name"]={
Line 926: Line 1,095:
[f]="expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'",
[f]="expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'",
[g]=n,
[g]=n,
[b]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[h]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[k]={{w,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\";"},{w,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]={
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"}
}
},
},
["err_pragma_expected_file_scope"]={
["err_pragma_expected_file_scope"]={
Line 938: Line 1,110:
[f]="\'#pragma %0\' can only appear at file scope",
[f]="\'#pragma %0\' can only appear at file scope",
[g]=n,
[g]=n,
[b]="\'\\#pragma (.*?)\' can only appear at file scope",
[h]="\'\\#pragma (.*?)\' can only appear at file scope",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{B,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\";"},{B,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{B,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]={{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\";"}},
[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"}
}
},
},
["err_pragma_expected_integer"]={
["err_pragma_expected_integer"]={
Line 950: Line 1,125:
[f]="expected an integer argument in \'#pragma %0\'",
[f]="expected an integer argument in \'#pragma %0\'",
[g]=n,
[g]=n,
[b]="expected an integer argument in \'\\#pragma (.*?)\'",
[h]="expected an integer argument in \'\\#pragma (.*?)\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{w,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\";"},{w,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]={
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"}
}
},
},
["err_pragma_fc_except_requires_precise"]={
["err_pragma_fc_except_requires_precise"]={
Line 962: Line 1,140:
[f]="\'#pragma float_control(except, on)\' is illegal when precise is disabled",
[f]="\'#pragma float_control(except, on)\' is illegal when precise is disabled",
[g]=n,
[g]=n,
[b]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[h]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{B,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]={{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);"}}
},
},
["err_pragma_fc_noprecise_requires_noexcept"]={
["err_pragma_fc_noprecise_requires_noexcept"]={
Line 974: Line 1,152:
[f]="\'#pragma float_control(precise, off)\' is illegal when except is enabled",
[f]="\'#pragma float_control(precise, off)\' is illegal when except is enabled",
[g]=n,
[g]=n,
[b]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_fc_noprecise_requires_nofenv"]={
["err_pragma_fc_noprecise_requires_nofenv"]={
Line 986: Line 1,167:
[f]="\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled",
[f]="\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled",
[g]=n,
[g]=n,
[b]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{B,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]={{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);"}}
},
},
["err_pragma_fc_pp_scope"]={
["err_pragma_fc_pp_scope"]={
Line 998: Line 1,179:
[f]="\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification",
[f]="\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification",
[g]=n,
[g]=n,
[b]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[h]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_fenv_requires_precise"]={
["err_pragma_fenv_requires_precise"]={
Line 1,010: Line 1,194:
[f]="\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[f]="\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[g]=n,
[g]=n,
[b]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[h]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{B,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]={{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);"}}
},
},
["err_pragma_file_or_compound_scope"]={
["err_pragma_file_or_compound_scope"]={
Line 1,022: Line 1,206:
[f]="\'#pragma %0\' can only appear at file scope or at the start of a compound statement",
[f]="\'#pragma %0\' can only appear at file scope or at the start of a compound statement",
[g]=n,
[g]=n,
[b]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[h]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[k]={{mb,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\";"},{mb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{mb,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\");"},{mb,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\";"},{mb,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]={{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\";"}},
[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"}
}
},
},
["err_pragma_float_control_malformed"]={
["err_pragma_float_control_malformed"]={
Line 1,034: Line 1,221:
[f]="pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'",
[f]="pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'",
[g]=n,
[g]=n,
[b]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[h]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[k]={{w,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);"},{w,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);"},{w,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);"},{w,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);"},{w,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);"},{w,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);"},{w,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);"},{w,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);"},{w,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]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}
}
},
},
["err_pragma_fp_invalid_argument"]={
["err_pragma_fp_invalid_argument"]={
Line 1,046: Line 1,236:
[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",
[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]=n,
[g]=n,
[b]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[k]={{w,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);"},{w,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;"},{w,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;"},{w,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;"},{w,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]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"}
}
},
},
["err_pragma_fp_invalid_option"]={
["err_pragma_fp_invalid_option"]={
Line 1,058: Line 1,251:
[f]="%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'",
[f]="%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'",
[g]=n,
[g]=n,
[b]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[h]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[k]={{w,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 << \"\";"},{w,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]={
["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"}
}
},
},
["err_pragma_invalid_keyword"]={
["err_pragma_invalid_keyword"]={
Line 1,070: Line 1,266:
[f]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[f]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[g]=n,
[g]=n,
[b]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[h]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute."},
[c]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute."},
[k]={{w,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]={
["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"}
}
},
},
["err_pragma_loop_compatibility"]={
["err_pragma_loop_compatibility"]={
Line 1,082: Line 1,281:
[f]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[f]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[g]=n,
[g]=n,
[b]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[h]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[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]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"}
}
},
},
["err_pragma_loop_invalid_argument_type"]={
["err_pragma_loop_invalid_argument_type"]={
Line 1,094: Line 1,296:
[f]="invalid argument of type %0; expected an integer type",
[f]="invalid argument of type %0; expected an integer type",
[g]=n,
[g]=n,
[b]="invalid argument of type (.*?); expected an integer type",
[h]="invalid argument of type (.*?); expected an integer type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_pragma_loop_invalid_argument_value"]={
["err_pragma_loop_invalid_argument_value"]={
Line 1,106: Line 1,311:
[f]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[f]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[g]=n,
[g]=n,
[b]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[h]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_pragma_loop_invalid_option"]={
["err_pragma_loop_invalid_option"]={
Line 1,118: Line 1,326:
[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",
[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]=n,
[g]=n,
[b]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[h]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[k]={{w,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 << \"\";"},{w,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]={
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}
}
},
},
["err_pragma_loop_invalid_vectorize_option"]={
["err_pragma_loop_invalid_vectorize_option"]={
Line 1,130: Line 1,341:
[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\')",
[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]=n,
[g]=n,
[b]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[h]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[c]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[k]={{w,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"]={
Line 1,142: Line 1,353:
[f]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[f]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[g]=n,
[g]=n,
[b]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[h]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"},
[c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"},
[k]={{w,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]={
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"}
}
},
},
["err_pragma_loop_precedes_nonloop"]={
["err_pragma_loop_precedes_nonloop"]={
Line 1,154: Line 1,368:
[f]="expected a for, while, or do-while loop to follow \'%0\'",
[f]="expected a for, while, or do-while loop to follow \'%0\'",
[g]=n,
[g]=n,
[b]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[h]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[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]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"}
}
},
},
["err_pragma_message_malformed"]={
["err_pragma_message_malformed"]={
Line 1,166: Line 1,383:
[f]="pragma %select{message|warning|error}0 requires parenthesized string",
[f]="pragma %select{message|warning|error}0 requires parenthesized string",
[g]=n,
[g]=n,
[b]="pragma (?:message|warning|error) requires parenthesized string",
[h]="pragma (?:message|warning|error) requires parenthesized string",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"},
[c]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"},
[k]={{J,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;"},{J,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;"},{J,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]={{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;"}},
[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"}
}
},
},
["err_pragma_misplaced_in_decl"]={
["err_pragma_misplaced_in_decl"]={
Line 1,178: Line 1,398:
[f]="this pragma cannot appear in %0 declaration",
[f]="this pragma cannot appear in %0 declaration",
[g]=n,
[g]=n,
[b]="this pragma cannot appear in (.*?) declaration",
[h]="this pragma cannot appear in (.*?) declaration",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"},
[c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"},
[k]={{R,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());"},{bb,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]={{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());"}},
[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"}
}
},
},
["err_pragma_missing_argument"]={
["err_pragma_missing_argument"]={
Line 1,190: Line 1,413:
[f]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[f]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[g]=n,
[g]=n,
[b]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[h]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."},
[c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."},
[k]={{w,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\'\";"},{w,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\";"},{w,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]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
}
},
},
["err_pragma_optimize_extra_argument"]={
["err_pragma_optimize_extra_argument"]={
Line 1,202: Line 1,428:
[f]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[f]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[g]=n,
[g]=n,
[b]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[h]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[k]={{w,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]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"}
}
},
},
["err_pragma_optimize_invalid_argument"]={
["err_pragma_optimize_invalid_argument"]={
Line 1,214: Line 1,443:
[f]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[f]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[g]=n,
[g]=n,
[b]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[k]={{w,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);"},{w,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]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
}
},
},
["err_pragma_options_align_mac68k_target_unsupported"]={
["err_pragma_options_align_mac68k_target_unsupported"]={
Line 1,226: Line 1,458:
[f]="mac68k alignment pragma is not supported on this target",
[f]="mac68k alignment pragma is not supported on this target",
[g]=n,
[g]=n,
[b]="mac68k alignment pragma is not supported on this target",
[h]="mac68k alignment pragma is not supported on this target",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."},
[c]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."},
[k]={{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_pack_identifer_not_supported"]={
["err_pragma_pack_identifer_not_supported"]={
Line 1,238: Line 1,473:
[f]="specifying an identifier within `#pragma pack` is not supported on this target",
[f]="specifying an identifier within `#pragma pack` is not supported on this target",
[g]=n,
[g]=n,
[b]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[h]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_pack_invalid_alignment"]={
["err_pragma_pack_invalid_alignment"]={
Line 1,250: Line 1,488:
[f]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[f]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[g]=n,
[g]=n,
[b]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[h]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{B,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]={{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);"}},
[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\'"}
}
},
},
["err_pragma_pipeline_invalid_keyword"]={
["err_pragma_pipeline_invalid_keyword"]={
Line 1,262: Line 1,503:
[f]="invalid argument; expected \'disable\'",
[f]="invalid argument; expected \'disable\'",
[g]=n,
[g]=n,
[b]="invalid argument; expected \'disable\'",
[h]="invalid argument; expected \'disable\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations."},
[c]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations."},
[k]={{w,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]={
["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"}
}
},
},
["err_pragma_pointers_to_members_unknown_kind"]={
["err_pragma_pointers_to_members_unknown_kind"]={
Line 1,274: Line 1,518:
[f]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[f]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[g]=n,
[g]=n,
[b]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[h]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members"},
[c]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members"},
[k]={{w,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;"},{w,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]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}
}
},
},
["err_pragma_pop_visibility_mismatch"]={
["err_pragma_pop_visibility_mismatch"]={
Line 1,286: Line 1,533:
[f]="#pragma visibility pop with no matching #pragma visibility push",
[f]="#pragma visibility pop with no matching #pragma visibility push",
[g]=n,
[g]=n,
[b]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[h]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[k]={{B,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{B,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]={{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);"}},
[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"}
}
},
},
["err_pragma_push_pop_macro_malformed"]={
["err_pragma_push_pop_macro_malformed"]={
Line 1,298: Line 1,548:
[f]="pragma %0 requires a parenthesized string",
[f]="pragma %0 requires a parenthesized string",
[g]=n,
[g]=n,
[b]="pragma (.*?) requires a parenthesized string",
[h]="pragma (.*?) requires a parenthesized string",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"},
[c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"},
[k]={{J,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);"},{J,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);"},{J,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]={{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);"}}
},
},
["err_pragma_push_visibility_mismatch"]={
["err_pragma_push_visibility_mismatch"]={
Line 1,310: Line 1,560:
[f]="#pragma visibility push with no matching #pragma visibility pop",
[f]="#pragma visibility push with no matching #pragma visibility pop",
[g]=n,
[g]=n,
[b]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[h]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[k]={{B,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}}
[k]={{C,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
[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"}
}
},
},
["err_pragma_section_invalid_for_target"]={
["err_pragma_section_invalid_for_target"]={
Line 1,322: Line 1,575:
[f]="argument to #pragma section is not valid for this target: %0",
[f]="argument to #pragma section is not valid for this target: %0",
[g]=n,
[g]=n,
[b]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[h]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{B,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]={{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));"}},
[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"}
}
},
},
["err_preserve_enum_value_invalid"]={
["err_preserve_enum_value_invalid"]={
Line 1,334: Line 1,590:
[f]="__builtin_preserve_enum_value argument %0 invalid",
[f]="__builtin_preserve_enum_value argument %0 invalid",
[g]=n,
[g]=n,
[b]="__builtin_preserve_enum_value argument (.*?) invalid",
[h]="__builtin_preserve_enum_value argument (.*?) invalid",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"}
}
},
},
["err_preserve_enum_value_not_const"]={
["err_preserve_enum_value_not_const"]={
Line 1,346: Line 1,605:
[f]="__builtin_preserve_enum_value argument %0 not a constant",
[f]="__builtin_preserve_enum_value argument %0 not a constant",
[g]=n,
[g]=n,
[b]="__builtin_preserve_enum_value argument (.*?) not a constant",
[h]="__builtin_preserve_enum_value argument (.*?) not a constant",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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"]={
Line 1,358: Line 1,617:
[f]="__builtin_preserve_field_info argument %0 not a constant",
[f]="__builtin_preserve_field_info argument %0 not a constant",
[g]=n,
[g]=n,
[b]="__builtin_preserve_field_info argument (.*?) not a constant",
[h]="__builtin_preserve_field_info argument (.*?) not a constant",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{v,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]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"}
}
},
},
["err_preserve_field_info_not_field"]={
["err_preserve_field_info_not_field"]={
Line 1,370: Line 1,632:
[f]="__builtin_preserve_field_info argument %0 not a field access",
[f]="__builtin_preserve_field_info argument %0 not a field access",
[g]=n,
[g]=n,
[b]="__builtin_preserve_field_info argument (.*?) not a field access",
[h]="__builtin_preserve_field_info argument (.*?) not a field access",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{v,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]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"}
}
},
},
["err_preserve_type_info_invalid"]={
["err_preserve_type_info_invalid"]={
Line 1,382: Line 1,647:
[f]="__builtin_preserve_type_info argument %0 invalid",
[f]="__builtin_preserve_type_info argument %0 invalid",
[g]=n,
[g]=n,
[b]="__builtin_preserve_type_info argument (.*?) invalid",
[h]="__builtin_preserve_type_info argument (.*?) invalid",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"}
}
},
},
["err_preserve_type_info_not_const"]={
["err_preserve_type_info_not_const"]={
Line 1,394: Line 1,662:
[f]="__builtin_preserve_type_info argument %0 not a constant",
[f]="__builtin_preserve_type_info argument %0 not a constant",
[g]=n,
[g]=n,
[b]="__builtin_preserve_type_info argument (.*?) not a constant",
[h]="__builtin_preserve_type_info argument (.*?) not a constant",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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"]={
Line 1,406: Line 1,674:
[f]="instance variable %0 is private",
[f]="instance variable %0 is private",
[g]=n,
[g]=n,
[b]="instance variable (.*?) is private",
[h]="instance variable (.*?) is private",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{p,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();"},{I,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]={{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();"}},
[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"}
}
},
},
["err_private_module_fragment_expected_semi"]={
["err_private_module_fragment_expected_semi"]={
Line 1,418: Line 1,689:
[f]="expected \';\' after private module fragment declaration",
[f]="expected \';\' after private module fragment declaration",
[g]=n,
[g]=n,
[b]="expected \';\' after private module fragment declaration",
[h]="expected \';\' after private module fragment declaration",
[h]=a,
[b]=a,
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[k]={{Z,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]={{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);"}}
},
},
["err_private_module_fragment_not_module"]={
["err_private_module_fragment_not_module"]={
Line 1,430: Line 1,701:
[f]="private module fragment declaration with no preceding module declaration",
[f]="private module fragment declaration with no preceding module declaration",
[g]=n,
[g]=n,
[b]="private module fragment declaration with no preceding module declaration",
[h]="private module fragment declaration with no preceding module declaration",
[h]=a,
[b]=a,
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[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]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"}
}
},
},
["err_private_module_fragment_not_module_interface"]={
["err_private_module_fragment_not_module_interface"]={
Line 1,442: Line 1,716:
[f]="private module fragment in module implementation unit",
[f]="private module fragment in module implementation unit",
[g]=n,
[g]=n,
[b]="private module fragment in module implementation unit",
[h]="private module fragment in module implementation unit",
[h]=a,
[b]=a,
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[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]={
["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"}
}
},
},
["err_private_module_fragment_redefined"]={
["err_private_module_fragment_redefined"]={
Line 1,454: Line 1,731:
[f]="private module fragment redefined",
[f]="private module fragment redefined",
[g]=n,
[g]=n,
[b]="private module fragment redefined",
[h]="private module fragment redefined",
[h]=a,
[b]=a,
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[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]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"}
}
},
},
["err_probability_not_constant_float"]={
["err_probability_not_constant_float"]={
Line 1,466: Line 1,746:
[f]="probability argument to __builtin_expect_with_probability must be constant floating-point expression",
[f]="probability argument to __builtin_expect_with_probability must be constant floating-point expression",
[g]=n,
[g]=n,
[b]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[h]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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]={
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"}
}
},
},
["err_probability_out_of_range"]={
["err_probability_out_of_range"]={
Line 1,478: Line 1,761:
[f]="probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]",
[f]="probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]",
[g]=n,
[g]=n,
[b]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[h]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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]={
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}
}
},
},
["err_property_accessor_type"]={
["err_property_accessor_type"]={
Line 1,490: Line 1,776:
[f]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[f]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[g]=n,
[g]=n,
[b]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[h]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{Q,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]={{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;"}},
[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 *\')"}
}
},
},
["err_property_found_suggest"]={
["err_property_found_suggest"]={
Line 1,502: Line 1,791:
[f]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[f]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[g]=n,
[g]=n,
[b]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[h]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."},
[c]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."},
[k]={{I,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]={{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, \".\");"}},
[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?"}
}
},
},
["err_property_function_in_objc_container"]={
["err_property_function_in_objc_container"]={
Line 1,514: Line 1,806:
[f]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[f]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[g]=n,
[g]=n,
[b]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[h]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, "},
[c]={"555132824a9e",1401300730,"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]={
["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:34:37: error: use of Objective-C property in function nested in Objective-C container not supported, move function outside its container"}
}
},
},
["err_property_implemented"]={
["err_property_implemented"]={
Line 1,526: Line 1,821:
[f]="property %0 is already implemented",
[f]="property %0 is already implemented",
[g]=n,
[g]=n,
[b]="property (.*?) is already implemented",
[h]="property (.*?) is already implemented",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{Q,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;"},{Q,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]={{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;"}},
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"}
}
},
},
["err_property_is_variably_modified"]={
["err_property_is_variably_modified"]={
Line 1,538: Line 1,836:
[f]="property %0 has a variably modified type",
[f]="property %0 has a variably modified type",
[g]=n,
[g]=n,
[b]="property (.*?) has a variably modified type",
[h]="property (.*?) has a variably modified type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and"},
[c]={"5e77d76c953d",1366097310,"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;"}}
Line 1,550: Line 1,848:
[f]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[f]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[g]=n,
[g]=n,
[b]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[h]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{Q,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;"},{Q,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]={{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;"}},
[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\')"}
}
},
},
["err_property_method_unavailable"]={
["err_property_method_unavailable"]={
Line 1,562: Line 1,863:
[f]="property access is using %0 method which is unavailable",
[f]="property access is using %0 method which is unavailable",
[g]=n,
[g]=n,
[b]="property access is using (.*?) method which is unavailable",
[h]="property access is using (.*?) method which is unavailable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared"},
[c]={"89ea9610b306",1402939541,"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]={
["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"}
}
},
},
["err_property_not_as_forward_class"]={
["err_property_not_as_forward_class"]={
Line 1,574: Line 1,878:
[f]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[f]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[g]=n,
[g]=n,
[b]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[h]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of"},
[c]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of"},
[k]={{db,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]={{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))"}},
[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)"}
}
},
},
["err_property_not_found"]={
["err_property_not_found"]={
Line 1,586: Line 1,893:
[f]="property %0 not found on object of type %1",
[f]="property %0 not found on object of type %1",
[g]=n,
[g]=n,
[b]="property (.*?) not found on object of type (.*?)",
[h]="property (.*?) not found on object of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{I,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);"},{I,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);"},{db,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);"},{db,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]={{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));"}},
[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\'"}
}
},
},
["err_property_not_found_forward_class"]={
["err_property_not_found_forward_class"]={
Line 1,598: Line 1,908:
[f]="property %0 cannot be found in forward class object %1",
[f]="property %0 cannot be found in forward class object %1",
[g]=n,
[g]=n,
[b]="property (.*?) cannot be found in forward class object (.*?)",
[h]="property (.*?) cannot be found in forward class object (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[k]={{db,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]={{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))"}},
[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\'"}
}
},
},
["err_property_not_found_suggest"]={
["err_property_not_found_suggest"]={
Line 1,610: Line 1,923:
[f]="property %0 not found on object of type %1; did you mean %2?",
[f]="property %0 not found on object of type %1; did you mean %2?",
[g]=n,
[g]=n,
[b]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[h]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[k]={{db,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]={{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));"}},
[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\'?"}
}
},
},
["err_property_setter_ambiguous_use"]={
["err_property_setter_ambiguous_use"]={
Line 1,622: Line 1,938:
[f]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[f]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[g]=n,
[g]=n,
[b]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[h]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[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]={
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"}
}
},
},
["err_property_type"]={
["err_property_type"]={
Line 1,634: Line 1,953:
[f]="property cannot have array or function type %0",
[f]="property cannot have array or function type %0",
[g]=n,
[g]=n,
[b]="property cannot have array or function type (.*?)",
[h]="property cannot have array or function type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{Q,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]={{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;"}},
[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]\')"}
}
},
},
["err_protected_ivar_access"]={
["err_protected_ivar_access"]={
Line 1,646: Line 1,968:
[f]="instance variable %0 is protected",
[f]="instance variable %0 is protected",
[g]=n,
[g]=n,
[b]="instance variable (.*?) is protected",
[h]="instance variable (.*?) is protected",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{I,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]={{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();"}},
[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"}
}
},
},
["err_protocol_has_circular_dependency"]={
["err_protocol_has_circular_dependency"]={
Line 1,658: Line 1,983:
[f]="protocol has circular dependency",
[f]="protocol has circular dependency",
[g]=n,
[g]=n,
[b]="protocol has circular dependency",
[h]="protocol has circular dependency",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{Y,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]={{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);"}},
[o]={
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"}
}
},
},
["err_protocol_property_mismatch"]={
["err_protocol_property_mismatch"]={
Line 1,670: Line 1,998:
[f]="property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis",
[f]="property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis",
[g]=n,
[g]=n,
[b]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[h]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"},
[c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"},
[k]={{Q,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]={{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);"}},
[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"}
}
},
},
["err_pseudo_dtor_base_not_scalar"]={
["err_pseudo_dtor_base_not_scalar"]={
Line 1,682: Line 2,013:
[f]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[f]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[g]=n,
[g]=n,
[b]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[h]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[k]={{E,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]={{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();"}},
[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"}
}
},
},
["err_pseudo_dtor_call_with_args"]={
["err_pseudo_dtor_call_with_args"]={
Line 1,694: Line 2,028:
[f]="call to pseudo-destructor cannot have any arguments",
[f]="call to pseudo-destructor cannot have any arguments",
[g]=n,
[g]=n,
[b]="call to pseudo\\-destructor cannot have any arguments",
[h]="call to pseudo\\-destructor cannot have any arguments",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[k]={{p,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]={{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()));"}},
[o]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"}
}
},
},
["err_pseudo_dtor_destructor_non_type"]={
["err_pseudo_dtor_destructor_non_type"]={
Line 1,706: Line 2,043:
[f]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[f]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[g]=n,
[g]=n,
[b]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[h]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"},
[c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"},
[k]={{E,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;"},{E,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]={{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;"}},
[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\'"}
}
},
},
["err_pseudo_dtor_type_mismatch"]={
["err_pseudo_dtor_type_mismatch"]={
Line 1,718: Line 2,058:
[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",
[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]=n,
[g]=n,
[b]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[h]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[k]={{E,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();"},{E,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]={{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();"}},
[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"}
}
},
},
["err_pure_friend"]={
["err_pure_friend"]={
Line 1,730: Line 2,073:
[f]="friend declaration cannot have a pure-specifier",
[f]="friend declaration cannot have a pure-specifier",
[g]=n,
[g]=n,
[b]="friend declaration cannot have a pure\\-specifier",
[h]="friend declaration cannot have a pure\\-specifier",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and"},
[c]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and"},
[k]={{y,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}}
[k]={{z,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
[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"}
}
},
},
["err_qualified_catch_declarator"]={
["err_qualified_catch_declarator"]={
Line 1,742: Line 2,088:
[f]="exception declarator cannot be qualified",
[f]="exception declarator cannot be qualified",
[g]=n,
[g]=n,
[b]="exception declarator cannot be qualified",
[h]="exception declarator cannot be qualified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{y,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]={{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();"}}
},
},
["err_qualified_friend_def"]={
["err_qualified_friend_def"]={
Line 1,754: Line 2,100:
[f]="friend function definition cannot be qualified with \'%0\'",
[f]="friend function definition cannot be qualified with \'%0\'",
[g]=n,
[g]=n,
[b]="friend function definition cannot be qualified with \'(.*?)\'",
[h]="friend function definition cannot be qualified with \'(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow"},
[c]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow"},
[k]={{y,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);"},{y,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]={{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();"}},
[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::\'"}
}
},
},
["err_qualified_friend_no_match"]={
["err_qualified_friend_no_match"]={
Line 1,766: Line 2,115:
[f]="friend declaration of %0 does not match any declaration in %1",
[f]="friend declaration of %0 does not match any declaration in %1",
[g]=n,
[g]=n,
[b]="friend declaration of (.*?) does not match any declaration in (.*?)",
[h]="friend declaration of (.*?) does not match any declaration in (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a"},
[c]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a"},
[k]={{t,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;"},{q,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;"},{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;"}}
},
},
["err_qualified_function_typeid"]={
["err_qualified_function_typeid"]={
Line 1,778: Line 2,127:
[f]="type operand %0 of \'typeid\' cannot have \'%1\' qualifier",
[f]="type operand %0 of \'typeid\' cannot have \'%1\' qualifier",
[g]=n,
[g]=n,
[b]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[h]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{F,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}}
[k]={{G,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
[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"}
}
},
},
["err_qualified_member_nonclass"]={
["err_qualified_member_nonclass"]={
Line 1,790: Line 2,142:
[f]="qualified member access refers to a member in %0",
[f]="qualified member access refers to a member in %0",
[g]=n,
[g]=n,
[b]="qualified member access refers to a member in (.*?)",
[h]="qualified member access refers to a member in (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!"},
[c]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!"},
[k]={{I,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]={{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();"}},
[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\'"}
}
},
},
["err_qualified_member_of_unrelated"]={
["err_qualified_member_of_unrelated"]={
Line 1,802: Line 2,157:
[f]="%q0 is not a member of class %1",
[f]="%q0 is not a member of class %1",
[g]=n,
[g]=n,
[b]="(.*?) is not a member of class (.*?)",
[h]="(.*?) is not a member of class (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access"},
[c]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access"},
[k]={{I,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]={{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;"}},
[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\')"}
}
},
},
["err_qualified_objc_access"]={
["err_qualified_objc_access"]={
Line 1,814: Line 2,172:
[f]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[f]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[g]=n,
[g]=n,
[b]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[h]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or"},
[c]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or"},
[k]={{I,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());"},{I,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]={{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());"}},
[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::\'"}
}
},
},
["err_qualified_objc_catch_parm"]={
["err_qualified_objc_catch_parm"]={
Line 1,826: Line 2,187:
[f]="@catch parameter declarator cannot be qualified",
[f]="@catch parameter declarator cannot be qualified",
[g]=n,
[g]=n,
[b]="@catch parameter declarator cannot be qualified",
[h]="@catch parameter declarator cannot be qualified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[k]={{Y,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]={{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();"}}
},
},
["err_qualified_param_declarator"]={
["err_qualified_param_declarator"]={
Line 1,838: Line 2,199:
[f]="parameter declarator cannot be qualified",
[f]="parameter declarator cannot be qualified",
[g]=n,
[g]=n,
[b]="parameter declarator cannot be qualified",
[h]="parameter declarator cannot be qualified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"}
}
},
},
["err_qualified_typedef_declarator"]={
["err_qualified_typedef_declarator"]={
Line 1,850: Line 2,214:
[f]="typedef declarator cannot be qualified",
[f]="typedef declarator cannot be qualified",
[g]=n,
[g]=n,
[b]="typedef declarator cannot be qualified",
[h]="typedef declarator cannot be qualified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:101:18: error: typedef declarator cannot be qualified"}
}
},
},
["err_range_on_array_parameter"]={
["err_range_on_array_parameter"]={
Line 1,862: Line 2,229:
[f]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[f]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[g]=n,
[g]=n,
[b]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[h]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a"},
[c]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a"},
[k]={{K,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]={{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;"}},
[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 *\'"}
}
},
},
["err_raw_delim_too_long"]={
["err_raw_delim_too_long"]={
Line 1,874: Line 2,244:
[f]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[f]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[g]=n,
[g]=n,
[b]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[h]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals."},
[c]={"54edccafc5e3",1313035575,"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]={
["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"}
}
},
},
["err_readonly_message_assignment"]={
["err_readonly_message_assignment"]={
Line 1,886: Line 2,259:
[f]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[f]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[g]=n,
[g]=n,
[b]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[h]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_realimag_invalid_type"]={
["err_realimag_invalid_type"]={
Line 1,898: Line 2,274:
[f]="invalid type %0 to %1 operator",
[f]="invalid type %0 to %1 operator",
[g]=n,
[g]=n,
[b]="invalid type (.*?) to (.*?) operator",
[h]="invalid type (.*?) to (.*?) operator",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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\");"}},
[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"}
}
},
},
["err_record_with_pointers_kernel_param"]={
["err_record_with_pointers_kernel_param"]={
Line 1,910: Line 2,289:
[f]="%select{struct|union}0 kernel parameters may not contain pointers",
[f]="%select{struct|union}0 kernel parameters may not contain pointers",
[g]=n,
[g]=n,
[b]="(?:struct|union) kernel parameters may not contain pointers",
[h]="(?:struct|union) kernel parameters may not contain pointers",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[k]={{t,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]={
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"}
}
},
},
["err_recursive_default_argument"]={
["err_recursive_default_argument"]={
Line 1,922: Line 2,304:
[f]="recursive evaluation of default argument",
[f]="recursive evaluation of default argument",
[g]=n,
[g]=n,
[b]="recursive evaluation of default argument",
[h]="recursive evaluation of default argument",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"},
[c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_recursive_superclass"]={
["err_recursive_superclass"]={
Line 1,934: Line 2,319:
[f]="trying to recursively use %0 as superclass of %1",
[f]="trying to recursively use %0 as superclass of %1",
[g]=n,
[g]=n,
[b]="trying to recursively use (.*?) as superclass of (.*?)",
[h]="trying to recursively use (.*?) as superclass of (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class."},
[c]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class."},
[k]={{Y,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]={{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);"}},
[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\'"}
}
},
},
["err_redeclaration_different_type"]={
["err_redeclaration_different_type"]={
Line 1,946: Line 2,334:
[f]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[f]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[g]=n,
[g]=n,
[b]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[h]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree"},
[c]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree"},
[k]={{t,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]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"}
}
},
},
["err_redeclaration_non_exported"]={
["err_redeclaration_non_exported"]={
Line 1,958: Line 2,349:
[f]="cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1",
[f]="cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1",
[g]=n,
[g]=n,
[b]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[h]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={tb,1616787805,sb},
[c]={Fb,1616787805,Gb},
[k]={{t,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]={
["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"}
}
},
},
["err_redefinition"]={
["err_redefinition"]={
Line 1,970: Line 2,364:
[f]="redefinition of %0",
[f]="redefinition of %0",
[g]=n,
[g]=n,
[b]="redefinition of (.*?)",
[h]="redefinition of (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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();"},{t,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;"},{t,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)"},{t,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();"},{t,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;"},{t,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;"},{t,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;"},{t,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;"},{y,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;"},{y,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();"},{y,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;"},{y,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();"},{p,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();"},{q,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;"},{q,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;"},{q,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;"},{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;"}},
[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\'"}
}
},
},
["err_redefinition_different_concept"]={
["err_redefinition_different_concept"]={
Line 1,982: Line 2,379:
[f]="redefinition of concept %0 with different template parameters or requirements",
[f]="redefinition of concept %0 with different template parameters or requirements",
[g]=n,
[g]=n,
[b]="redefinition of concept (.*?) with different template parameters or requirements",
[h]="redefinition of concept (.*?) with different template parameters or requirements",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{q,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]={{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();"}}
},
},
["err_redefinition_different_kind"]={
["err_redefinition_different_kind"]={
Line 1,994: Line 2,391:
[f]="redefinition of %0 as different kind of symbol",
[f]="redefinition of %0 as different kind of symbol",
[g]=n,
[g]=n,
[b]="redefinition of (.*?) as different kind of symbol",
[h]="redefinition of (.*?) as different kind of symbol",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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();"},{t,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();"},{t,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();"},{t,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;"},{y,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;"},{y,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();"},{y,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;"},{y,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;"},{Y,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;"},{Y,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;"},{Y,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;"},{Y,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;"},{Y,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];"},{q,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;"},{q,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;"},{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();"}},
[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"}
}
},
},
["err_redefinition_different_namespace_alias"]={
["err_redefinition_different_namespace_alias"]={
Line 2,006: Line 2,406:
[f]="redefinition of %0 as an alias for a different namespace",
[f]="redefinition of %0 as an alias for a different namespace",
[g]=n,
[g]=n,
[b]="redefinition of (.*?) as an alias for a different namespace",
[h]="redefinition of (.*?) as an alias for a different namespace",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[c]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[k]={{y,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]={{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;"}},
[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"}
}
},
},
["err_redefinition_different_type"]={
["err_redefinition_different_type"]={
Line 2,018: Line 2,421:
[f]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[f]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[g]=n,
[g]=n,
[b]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[h]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"}
}
},
},
["err_redefinition_different_typedef"]={
["err_redefinition_different_typedef"]={
Line 2,030: Line 2,436:
[f]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[f]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[g]=n,
[g]=n,
[b]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[h]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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;"},{y,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;"},{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();"}},
[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\')"}
}
},
},
["err_redefinition_extern_inline"]={
["err_redefinition_extern_inline"]={
Line 2,042: Line 2,451:
[f]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[f]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[g]=n,
[g]=n,
[b]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[h]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern"},
[c]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern"},
[k]={{t,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]={
["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"}
}
},
},
["err_redefinition_of_enumerator"]={
["err_redefinition_of_enumerator"]={
Line 2,054: Line 2,466:
[f]="redefinition of enumerator %0",
[f]="redefinition of enumerator %0",
[g]=n,
[g]=n,
[b]="redefinition of enumerator (.*?)",
[h]="redefinition of enumerator (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"}
}
},
},
["err_redefinition_of_label"]={
["err_redefinition_of_label"]={
Line 2,066: Line 2,481:
[f]="redefinition of label %0",
[f]="redefinition of label %0",
[g]=n,
[g]=n,
[b]="redefinition of label (.*?)",
[h]="redefinition of label (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{K,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]={{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();"}},
[o]={
["clang/test/Parser/goto.c"]={"clang/test/Parser/goto.c:26:3: error: redefinition of label \'l\'"}
}
},
},
["err_redefinition_variably_modified_typedef"]={
["err_redefinition_variably_modified_typedef"]={
Line 2,078: Line 2,496:
[f]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[f]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[g]=n,
[g]=n,
[b]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[h]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a"},
[c]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a"},
[k]={{t,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]={
["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"}
}
},
},
["err_ref_array_type"]={
["err_ref_array_type"]={
Line 2,090: Line 2,511:
[f]="cannot refer to declaration with an array type inside block",
[f]="cannot refer to declaration with an array type inside block",
[g]=n,
[g]=n,
[b]="cannot refer to declaration with an array type inside block",
[h]="cannot refer to declaration with an array type inside block",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948."},
[c]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948."},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_ref_bad_target"]={
["err_ref_bad_target"]={
Line 2,102: Line 2,526:
[f]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function",
[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]=n,
[g]=n,
[b]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[c]={"7277fe8aed6e",1317599380,"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);"},{p,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);"},{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;"}},
[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"}
}
},
},
["err_ref_bad_target_global_initializer"]={
["err_ref_bad_target_global_initializer"]={
Line 2,114: Line 2,541:
[f]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[f]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[g]=n,
[g]=n,
[b]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers."},
[c]={"c989c3e78475",1470791361,"[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]={
["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"}
}
},
},
["err_ref_flexarray_type"]={
["err_ref_flexarray_type"]={
Line 2,126: Line 2,556:
[f]="cannot refer to declaration of structure variable with flexible array member inside block",
[f]="cannot refer to declaration of structure variable with flexible array member inside block",
[g]=n,
[g]=n,
[b]="cannot refer to declaration of structure variable with flexible array member inside block",
[h]="cannot refer to declaration of structure variable with flexible array member inside block",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "},
[c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_ref_init_ambiguous"]={
["err_ref_init_ambiguous"]={
Line 2,138: Line 2,571:
[f]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[f]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[g]=n,
[g]=n,
[b]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[h]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."},
[c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."},
[k]={{D,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]={{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);"}},
[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"}
}
},
},
["err_ref_non_value"]={
["err_ref_non_value"]={
Line 2,150: Line 2,586:
[f]="%0 does not refer to a value",
[f]="%0 does not refer to a value",
[g]=n,
[g]=n,
[b]="(.*?) does not refer to a value",
[h]="(.*?) does not refer to a value",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[c]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[k]={{p,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]={{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();"}},
[o]={
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"}
}
},
},
["err_ref_qualifier_comparison_operator"]={
["err_ref_qualifier_comparison_operator"]={
Line 2,162: Line 2,601:
[f]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[f]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[g]=n,
[g]=n,
[b]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[h]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_ref_qualifier_constructor"]={
["err_ref_qualifier_constructor"]={
Line 2,174: Line 2,616:
[f]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[f]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[g]=n,
[g]=n,
[b]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[k]={{y,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]={{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());"}},
[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"}
}
},
},
["err_ref_qualifier_destructor"]={
["err_ref_qualifier_destructor"]={
Line 2,186: Line 2,631:
[f]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[f]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[g]=n,
[g]=n,
[b]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[k]={{y,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]={{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());"}},
[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"}
}
},
},
["err_ref_qualifier_overload"]={
["err_ref_qualifier_overload"]={
Line 2,198: Line 2,646:
[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",
[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]=n,
[g]=n,
[b]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')",
[h]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot"},
[c]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot"},
[k]={{ab,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]={{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();"}},
[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"}
}
},
},
["err_ref_vm_type"]={
["err_ref_vm_type"]={
Line 2,210: Line 2,661:
[f]="cannot refer to declaration with a variably modified type inside block",
[f]="cannot refer to declaration with a variably modified type inside block",
[g]=n,
[g]=n,
[b]="cannot refer to declaration with a variably modified type inside block",
[h]="cannot refer to declaration with a variably modified type inside block",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."},
[c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_refactor_code_outside_of_function"]={
["err_refactor_code_outside_of_function"]={
Line 2,222: Line 2,676:
[f]="the selected code is not a part of a function\'s / method\'s body",
[f]="the selected code is not a part of a function\'s / method\'s body",
[g]=n,
[g]=n,
[b]="the selected code is not a part of a function\'s \\/ method\'s body",
[h]="the selected code is not a part of a function\'s \\/ method\'s body",
[h]=a,
[b]=a,
[j]=ib,
[j]=qb,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[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);"}}
Line 2,234: Line 2,688:
[f]="the selected expression can\'t be extracted",
[f]="the selected expression can\'t be extracted",
[g]=n,
[g]=n,
[b]="the selected expression can\'t be extracted",
[h]="the selected expression can\'t be extracted",
[h]=a,
[b]=a,
[j]=ib,
[j]=qb,
[c]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters"},
[c]={"1e416fe23df4",1509495655,"[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);"}}
Line 2,246: Line 2,700:
[f]="the selected expression is too simple to extract",
[f]="the selected expression is too simple to extract",
[g]=n,
[g]=n,
[b]="the selected expression is too simple to extract",
[h]="the selected expression is too simple to extract",
[h]=a,
[b]=a,
[j]=ib,
[j]=qb,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[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);"}}
Line 2,258: Line 2,712:
[f]="refactoring action can\'t be initiated without a selection",
[f]="refactoring action can\'t be initiated without a selection",
[g]=n,
[g]=n,
[b]="refactoring action can\'t be initiated without a selection",
[h]="refactoring action can\'t be initiated without a selection",
[h]=a,
[b]=a,
[j]=ib,
[j]=qb,
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[c]={"f5ca27cc3785",1508178506,"[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);"}}
Line 2,270: Line 2,724:
[f]="the provided selection does not overlap with the AST nodes of interest",
[f]="the provided selection does not overlap with the AST nodes of interest",
[g]=n,
[g]=n,
[b]="the provided selection does not overlap with the AST nodes of interest",
[h]="the provided selection does not overlap with the AST nodes of interest",
[h]=a,
[b]=a,
[j]=ib,
[j]=qb,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[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);"}}
Line 2,282: Line 2,736:
[f]="there is no symbol at the given location",
[f]="there is no symbol at the given location",
[g]=n,
[g]=n,
[b]="there is no symbol at the given location",
[h]="there is no symbol at the given location",
[h]=a,
[b]=a,
[j]=ib,
[j]=qb,
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[c]={"f5ca27cc3785",1508178506,"[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);"}}
Line 2,294: Line 2,748:
[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",
[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]=n,
[g]=n,
[b]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[h]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,Bb},
[k]={{D,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*/"},{D,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*/"},{D,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]={{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*/"}},
[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"}
}
},
},
["err_reference_bind_failed"]={
["err_reference_bind_failed"]={
Line 2,306: Line 2,763:
[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",
[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]=n,
[g]=n,
[b]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[h]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,Bb},
[k]={{D,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]={{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();"}},
[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 (*)()\'"}
}
},
},
["err_reference_bind_init_list"]={
["err_reference_bind_init_list"]={
Line 2,318: Line 2,778:
[f]="reference to type %0 cannot bind to an initializer list",
[f]="reference to type %0 cannot bind to an initializer list",
[g]=n,
[g]=n,
[b]="reference to type (.*?) cannot bind to an initializer list",
[h]="reference to type (.*?) cannot bind to an initializer list",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."},
[c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_reference_bind_temporary_addrspace"]={
["err_reference_bind_temporary_addrspace"]={
Line 2,330: Line 2,793:
[f]="reference of type %0 cannot bind to a temporary object because of address space mismatch",
[f]="reference of type %0 cannot bind to a temporary object because of address space mismatch",
[g]=n,
[g]=n,
[b]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[h]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries"},
[c]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries"},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_reference_bind_to_bitfield"]={
["err_reference_bind_to_bitfield"]={
Line 2,342: Line 2,808:
[f]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[f]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[g]=n,
[g]=n,
[b]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[h]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,Bb},
[k]={{D,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]={{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();"}},
[o]={
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"}
}
},
},
["err_reference_bind_to_matrix_element"]={
["err_reference_bind_to_matrix_element"]={
Line 2,354: Line 2,823:
[f]="%select{non-const|volatile}0 reference cannot bind to matrix element",
[f]="%select{non-const|volatile}0 reference cannot bind to matrix element",
[g]=n,
[g]=n,
[b]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[h]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_reference_bind_to_vector_element"]={
["err_reference_bind_to_vector_element"]={
Line 2,366: Line 2,838:
[f]="%select{non-const|volatile}0 reference cannot bind to vector element",
[f]="%select{non-const|volatile}0 reference cannot bind to vector element",
[g]=n,
[g]=n,
[b]="(?:non\\-const|volatile) reference cannot bind to vector element",
[h]="(?:non\\-const|volatile) reference cannot bind to vector element",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element."},
[c]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element."},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_reference_capture_with_reference_default"]={
["err_reference_capture_with_reference_default"]={
Line 2,378: Line 2,853:
[f]="\'&\' cannot precede a capture when the capture default is \'&\'",
[f]="\'&\' cannot precede a capture when the capture default is \'&\'",
[g]=n,
[g]=n,
[b]="\'&\' cannot precede a capture when the capture default is \'&\'",
[h]="\'&\' cannot precede a capture when the capture default is \'&\'",
[h]=a,
[b]=a,
[j]="Lambda Issue",
[j]="Lambda Issue",
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[k]={{yb,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]={{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));"}},
[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 \'&\'"}
}
},
},
["err_reference_has_multiple_inits"]={
["err_reference_has_multiple_inits"]={
Line 2,390: Line 2,868:
[f]="reference cannot be initialized with multiple values",
[f]="reference cannot be initialized with multiple values",
[g]=n,
[g]=n,
[b]="reference cannot be initialized with multiple values",
[h]="reference cannot be initialized with multiple values",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,Bb},
[k]={{D,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]={{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());"}}
},
},
["err_reference_pipe_type"]={
["err_reference_pipe_type"]={
Line 2,402: Line 2,880:
[f]="pipes packet types cannot be of reference type",
[f]="pipes packet types cannot be of reference type",
[g]=n,
[g]=n,
[b]="pipes packet types cannot be of reference type",
[h]="pipes packet types cannot be of reference type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"},
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"},
[k]={{t,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]={
["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"}
}
},
},
["err_reference_to_function_with_unsatisfied_constraints"]={
["err_reference_to_function_with_unsatisfied_constraints"]={
Line 2,414: Line 2,895:
[f]="invalid reference to function %0: constraints not satisfied",
[f]="invalid reference to function %0: constraints not satisfied",
[g]=n,
[g]=n,
[b]="invalid reference to function (.*?)\\: constraints not satisfied",
[h]="invalid reference to function (.*?)\\: constraints not satisfied",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_reference_to_local_in_enclosing_context"]={
["err_reference_to_local_in_enclosing_context"]={
Line 2,426: Line 2,910:
[f]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[f]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[g]=n,
[g]=n,
[b]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[h]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG"},
[c]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG"},
[k]={{p,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]={{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;"}},
[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\'"}
}
},
},
["err_reference_to_void"]={
["err_reference_to_void"]={
Line 2,438: Line 2,925:
[f]="cannot form a reference to \'void\'",
[f]="cannot form a reference to \'void\'",
[g]=n,
[g]=n,
[b]="cannot form a reference to \'void\'",
[h]="cannot form a reference to \'void\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{F,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]={{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);"}},
[o]={
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"}
}
},
},
["err_reference_var_requires_init"]={
["err_reference_var_requires_init"]={
Line 2,450: Line 2,940:
[f]="declaration of reference variable %0 requires an initializer",
[f]="declaration of reference variable %0 requires an initializer",
[g]=n,
[g]=n,
[b]="declaration of reference variable (.*?) requires an initializer",
[h]="declaration of reference variable (.*?) requires an initializer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{t,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]={
["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"}
}
},
},
["err_reference_without_init"]={
["err_reference_without_init"]={
Line 2,462: Line 2,955:
[f]="reference to type %0 requires an initializer",
[f]="reference to type %0 requires an initializer",
[g]=n,
[g]=n,
[b]="reference to type (.*?) requires an initializer",
[h]="reference to type (.*?) requires an initializer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"},
[c]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_regparm_mismatch"]={
["err_regparm_mismatch"]={
Line 2,474: Line 2,970:
[f]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[f]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[g]=n,
[g]=n,
[b]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[h]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a"},
[c]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a"},
[k]={{t,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]={
["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"}
}
},
},
["err_relocatable_without_isysroot"]={
["err_relocatable_without_isysroot"]={
Line 2,486: Line 2,985:
[f]="must specify system root with -isysroot when building a relocatable PCH file",
[f]="must specify system root with -isysroot when building a relocatable PCH file",
[g]=n,
[g]=n,
[b]="must specify system root with \\-isysroot when building a relocatable PCH file",
[h]="must specify system root with \\-isysroot when building a relocatable PCH file",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."},
[c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."},
Line 2,498: Line 2,997:
[f]="%0 attribute cannot be repeated",
[f]="%0 attribute cannot be repeated",
[g]=n,
[g]=n,
[b]="(.*?) attribute cannot be repeated",
[h]="(.*?) attribute cannot be repeated",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override."},
[c]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override."},
[k]={{O,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]={{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;"}},
[o]={
["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"}
}
},
},
["err_require_constant_init_failed"]={
["err_require_constant_init_failed"]={
Line 2,510: Line 3,012:
[f]="variable does not have a constant initializer",
[f]="variable does not have a constant initializer",
[g]=n,
[g]=n,
[b]="variable does not have a constant initializer",
[h]="variable does not have a constant initializer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[c]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[k]={{t,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]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"}
}
},
},
["err_requires_clause_inside_parens"]={
["err_requires_clause_inside_parens"]={
Line 2,522: Line 3,027:
[f]="trailing requires clause should be placed outside parentheses",
[f]="trailing requires clause should be placed outside parentheses",
[g]=n,
[g]=n,
[b]="trailing requires clause should be placed outside parentheses",
[h]="trailing requires clause should be placed outside parentheses",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{R,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]={{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);"}},
[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"}
}
},
},
["err_requires_clause_must_appear_after_trailing_return"]={
["err_requires_clause_must_appear_after_trailing_return"]={
Line 2,534: Line 3,042:
[f]="trailing return type must appear before trailing requires clause",
[f]="trailing return type must appear before trailing requires clause",
[g]=n,
[g]=n,
[b]="trailing return type must appear before trailing requires clause",
[h]="trailing return type must appear before trailing requires clause",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{bb,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]={{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;"}},
[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"}
}
},
},
["err_requires_clause_on_declarator_not_declaring_a_function"]={
["err_requires_clause_on_declarator_not_declaring_a_function"]={
Line 2,546: Line 3,057:
[f]="trailing requires clause can only be used when declaring a function",
[f]="trailing requires clause can only be used when declaring a function",
[g]=n,
[g]=n,
[b]="trailing requires clause can only be used when declaring a function",
[h]="trailing requires clause can only be used when declaring a function",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{R,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);"},{bb,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]={{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);"}},
[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"}
}
},
},
["err_requires_expr_expected_type_constraint"]={
["err_requires_expr_expected_type_constraint"]={
Line 2,558: Line 3,072:
[f]="expected concept name with optional arguments",
[f]="expected concept name with optional arguments",
[g]=n,
[g]=n,
[b]="expected concept name with optional arguments",
[h]="expected concept name with optional arguments",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{cb,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]={{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);"}},
[o]={
[nb]={"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"]={
Line 2,570: Line 3,087:
[f]="requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)",
[f]="requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)",
[g]=n,
[g]=n,
[b]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[h]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[k]={{cb,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]={{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\");"}},
[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)"}
}
},
},
["err_requires_expr_local_parameter_default_argument"]={
["err_requires_expr_local_parameter_default_argument"]={
Line 2,582: Line 3,102:
[f]="default arguments not allowed for parameters of a requires expression",
[f]="default arguments not allowed for parameters of a requires expression",
[g]=n,
[g]=n,
[b]="default arguments not allowed for parameters of a requires expression",
[h]="default arguments not allowed for parameters of a requires expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={kb,1576172311,lb},
[c]={sb,1576172311,tb},
[k]={{E,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]={{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);"}},
[o]={
[nb]={"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"]={
Line 2,594: Line 3,117:
[f]="expected \'->\' before expression type requirement",
[f]="expected \'->\' before expression type requirement",
[g]=n,
[g]=n,
[b]="expected \'\\-\\>\' before expression type requirement",
[h]="expected \'\\-\\>\' before expression type requirement",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{cb,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]={{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(), \"->\");"}},
[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"}
}
},
},
["err_requires_expr_parameter_list_ellipsis"]={
["err_requires_expr_parameter_list_ellipsis"]={
Line 2,606: Line 3,132:
[f]="varargs not allowed in requires expression",
[f]="varargs not allowed in requires expression",
[g]=n,
[g]=n,
[b]="varargs not allowed in requires expression",
[h]="varargs not allowed in requires expression",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{cb,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]={{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);"}},
[o]={
[nb]={"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"]={
Line 2,618: Line 3,147:
[f]="constraint variable %0 cannot be used in an evaluated context",
[f]="constraint variable %0 cannot be used in an evaluated context",
[g]=n,
[g]=n,
[b]="constraint variable (.*?) cannot be used in an evaluated context",
[h]="constraint variable (.*?) cannot be used in an evaluated context",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={kb,1576172311,lb},
[c]={sb,1576172311,tb},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_requires_expr_simple_requirement_noexcept"]={
["err_requires_expr_simple_requirement_noexcept"]={
Line 2,630: Line 3,162:
[f]="\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)",
[f]="\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)",
[g]=n,
[g]=n,
[b]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[h]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={fb,1570627358,gb},
[c]={kb,1570627358,jb},
[k]={{cb,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]={{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(), \"}\");"}},
[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)"}
}
},
},
["err_restricted_superclass_mismatch"]={
["err_restricted_superclass_mismatch"]={
Line 2,642: Line 3,177:
[f]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[f]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[g]=n,
[g]=n,
[b]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[h]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"},
[c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"},
[k]={{Y,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);"},{Y,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]={{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);"}},
[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"}
}
},
},
["err_ret_local_block"]={
["err_ret_local_block"]={
Line 2,654: Line 3,192:
[f]="returning block that lives on the local stack",
[f]="returning block that lives on the local stack",
[g]=n,
[g]=n,
[b]="returning block that lives on the local stack",
[h]="returning block that lives on the local stack",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{D,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]={{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;"}},
[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"}
}
},
},
["err_rethrow_used_outside_catch"]={
["err_rethrow_used_outside_catch"]={
Line 2,666: Line 3,207:
[f]="@throw (rethrow) used outside of a @catch block",
[f]="@throw (rethrow) used outside of a @catch block",
[g]=n,
[g]=n,
[b]="@throw \\(rethrow\\) used outside of a @catch block",
[h]="@throw \\(rethrow\\) used outside of a @catch block",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{K,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]={{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));"}},
[o]={
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"}
}
},
},
["err_return_block_has_expr"]={
["err_return_block_has_expr"]={
Line 2,678: Line 3,222:
[f]="void block should not return a value",
[f]="void block should not return a value",
[g]=n,
[g]=n,
[b]="void block should not return a value",
[h]="void block should not return a value",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{K,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]={{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);"}}
},
},
["err_return_in_captured_stmt"]={
["err_return_in_captured_stmt"]={
Line 2,690: Line 3,234:
[f]="cannot return from %0",
[f]="cannot return from %0",
[g]=n,
[g]=n,
[b]="cannot return from (.*?)",
[h]="cannot return from (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"},
[c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"},
[k]={{K,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]={{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();"}},
[o]={
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"}
}
},
},
["err_return_in_constructor_handler"]={
["err_return_in_constructor_handler"]={
Line 2,702: Line 3,249:
[f]="return in the catch of a function try block of a constructor is illegal",
[f]="return in the catch of a function try block of a constructor is illegal",
[g]=n,
[g]=n,
[b]="return in the catch of a function try block of a constructor is illegal",
[h]="return in the catch of a function try block of a constructor is illegal",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ..."},
[c]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ..."},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_return_in_coroutine"]={
["err_return_in_coroutine"]={
Line 2,714: Line 3,264:
[f]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[f]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[g]=n,
[g]=n,
[b]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[h]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[h]=a,
[b]=a,
[j]="Coroutines Issue",
[j]="Coroutines Issue",
[c]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[c]={"cfd53b4e9993",1445494430,"[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]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"}
}
},
},
["err_return_init_list"]={
["err_return_init_list"]={
Line 2,726: Line 3,279:
[f]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[f]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[g]=n,
[g]=n,
[b]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[h]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers."},
[c]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers."},
[k]={{K,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]={{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();"}},
[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"}
}
},
},
["err_return_value_with_address_space"]={
["err_return_value_with_address_space"]={
Line 2,738: Line 3,294:
[f]="return type cannot be qualified with address space",
[f]="return type cannot be qualified with address space",
[g]=n,
[g]=n,
[b]="return type cannot be qualified with address space",
[h]="return type cannot be qualified with address space",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{t,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);"},{t,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);"},{yb,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);"},{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);"}},
[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"}
}
},
},
["err_right_angle_bracket_equal_needs_space"]={
["err_right_angle_bracket_equal_needs_space"]={
Line 2,750: Line 3,309:
[f]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[f]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[g]=n,
[g]=n,
[b]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[h]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to"},
[c]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to"},
[k]={{rb,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]={{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;"}},
[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 \'> =\')"}
}
},
},
["err_riscv_builtin_invalid_lmul"]={
["err_riscv_builtin_invalid_lmul"]={
Line 2,762: Line 3,324:
[f]="LMUL argument must be in the range [0,3] or [5,7]",
[f]="LMUL argument must be in the range [0,3] or [5,7]",
[g]=n,
[g]=n,
[b]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[h]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={pb,1615397021,ub},
[c]={yb,1615397021,zb},
[k]={{v,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]={
["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"}
}
},
},
["err_riscv_builtin_requires_extension"]={
["err_riscv_builtin_requires_extension"]={
Line 2,774: Line 3,339:
[f]="builtin requires%select{| at least one of the following extensions to be enabled}0: %1",
[f]="builtin requires%select{| at least one of the following extensions to be enabled}0: %1",
[g]=n,
[g]=n,
[b]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[h]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{v,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);"},{v,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]={
["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"}
}
},
},
["err_riscv_type_requires_extension"]={
["err_riscv_type_requires_extension"]={
Line 2,786: Line 3,354:
[f]="RISC-V type %0 requires the \'%1\' extension",
[f]="RISC-V type %0 requires the \'%1\' extension",
[g]=n,
[g]=n,
[b]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[h]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{v,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\";"},{v,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\";"},{v,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\";"},{v,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\";"},{v,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]={
["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"}
}
},
},
["err_root_class_cannot_use_super"]={
["err_root_class_cannot_use_super"]={
Line 2,798: Line 3,369:
[f]="%0 cannot use \'super\' because it is a root class",
[f]="%0 cannot use \'super\' because it is a root class",
[g]=n,
[g]=n,
[b]="(.*?) cannot use \'super\' because it is a root class",
[h]="(.*?) cannot use \'super\' because it is a root class",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{db,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();"},{db,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]={{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();"}},
[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"}
}
},
},
["err_roptr_cannot_build_shared"]={
["err_roptr_cannot_build_shared"]={
Line 2,810: Line 3,384:
[f]="-mxcoff-roptr is not supported with -shared",
[f]="-mxcoff-roptr is not supported with -shared",
[g]=n,
[g]=n,
[b]="\\-mxcoff\\-roptr is not supported with \\-shared",
[h]="\\-mxcoff\\-roptr is not supported with \\-shared",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
Line 2,822: Line 3,396:
[f]="-mxcoff-roptr is supported only with -fdata-sections",
[f]="-mxcoff-roptr is supported only with -fdata-sections",
[g]=n,
[g]=n,
[b]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[h]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
Line 2,834: Line 3,408:
[f]="argument should be the value 90 or 270",
[f]="argument should be the value 90 or 270",
[g]=n,
[g]=n,
[b]="argument should be the value 90 or 270",
[h]="argument should be the value 90 or 270",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{v,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]={
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"}
}
},
},
["err_rotation_argument_to_cmla"]={
["err_rotation_argument_to_cmla"]={
Line 2,846: Line 3,423:
[f]="argument should be the value 0, 90, 180 or 270",
[f]="argument should be the value 0, 90, 180 or 270",
[g]=n,
[g]=n,
[b]="argument should be the value 0, 90, 180 or 270",
[h]="argument should be the value 0, 90, 180 or 270",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{v,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]={
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"}
}
},
},
["err_rref_in_exception_spec"]={
["err_rref_in_exception_spec"]={
Line 2,858: Line 3,438:
[f]="rvalue reference type %0 is not allowed in exception specification",
[f]="rvalue reference type %0 is not allowed in exception specification",
[g]=n,
[g]=n,
[b]="rvalue reference type (.*?) is not allowed in exception specification",
[h]="rvalue reference type (.*?) is not allowed in exception specification",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications."},
[c]={"a118c6a8c0e9",1354143162,"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]={
[Jb]={"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"]={
Line 2,870: Line 3,453:
[f]="sampler_t variable required - got %0",
[f]="sampler_t variable required - got %0",
[g]=n,
[g]=n,
[b]="sampler_t variable required \\- got (.*?)",
[h]="sampler_t variable required \\- got (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."},
[c]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."},
[k]={{D,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]={{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;"}}
},
},
["err_sampler_initializer_not_integer"]={
["err_sampler_initializer_not_integer"]={
Line 2,882: Line 3,465:
[f]="sampler_t initialization requires 32-bit integer, not %0",
[f]="sampler_t initialization requires 32-bit integer, not %0",
[g]=n,
[g]=n,
[b]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
[h]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"},
[c]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"},
[k]={{D,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]={{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;"}},
[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\'"}
}
},
},
["err_scoped_enum_missing_identifier"]={
["err_scoped_enum_missing_identifier"]={
Line 2,894: Line 3,480:
[f]="scoped enumeration requires a name",
[f]="scoped enumeration requires a name",
[g]=n,
[g]=n,
[b]="scoped enumeration requires a name",
[h]="scoped enumeration requires a name",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"},
[c]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"},
[k]={{R,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]={{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);"}},
[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"}
}
},
},
["err_second_argument_to_cwsc_not_pointer"]={
["err_second_argument_to_cwsc_not_pointer"]={
Line 2,906: Line 3,495:
[f]="second argument to __builtin_call_with_static_chain must be of pointer type",
[f]="second argument to __builtin_call_with_static_chain must be of pointer type",
[g]=n,
[g]=n,
[b]="second argument to __builtin_call_with_static_chain must be of pointer type",
[h]="second argument to __builtin_call_with_static_chain must be of pointer type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension."},
[c]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension."},
[k]={{v,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]={
["clang/test/Sema/call-with-static-chain.c"]={"clang/test/Sema/call-with-static-chain.c:10:3: error: second argument to __builtin_call_with_static_chain must be of pointer type"}
}
},
},
["err_second_parameter_to_va_arg_abstract"]={
["err_second_parameter_to_va_arg_abstract"]={
Line 2,918: Line 3,510:
[f]="second argument to \'va_arg\' is of abstract type %0",
[f]="second argument to \'va_arg\' is of abstract type %0",
[g]=n,
[g]=n,
[b]="second argument to \'va_arg\' is of abstract type (.*?)",
[h]="second argument to \'va_arg\' is of abstract type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[k]={{p,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]={{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()))"}},
[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\'"}
}
},
},
["err_second_parameter_to_va_arg_incomplete"]={
["err_second_parameter_to_va_arg_incomplete"]={
Line 2,930: Line 3,525:
[f]="second argument to \'va_arg\' is of incomplete type %0",
[f]="second argument to \'va_arg\' is of incomplete type %0",
[g]=n,
[g]=n,
[b]="second argument to \'va_arg\' is of incomplete type (.*?)",
[h]="second argument to \'va_arg\' is of incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[k]={{p,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]={{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()))"}},
[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\'"}
}
},
},
["err_section_conflict"]={
["err_section_conflict"]={
Line 2,942: Line 3,540:
[f]="%0 causes a section type conflict with %1",
[f]="%0 causes a section type conflict with %1",
[g]=n,
[g]=n,
[b]="(.*?) causes a section type conflict with (.*?)",
[h]="(.*?) causes a section type conflict with (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas"},
[c]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas"},
[k]={{B,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{B,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]={{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;"}},
[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"}
}
},
},
["err_seh___except_block"]={
["err_seh___except_block"]={
Line 2,954: Line 3,555:
[f]="%0 only allowed in __except block or filter expression",
[f]="%0 only allowed in __except block or filter expression",
[g]=n,
[g]=n,
[b]="(.*?) only allowed in __except block or filter expression",
[h]="(.*?) only allowed in __except block or filter expression",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{Z,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);"},{Z,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);"},{Z,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{v,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]={{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))"}},
[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"}
}
},
},
["err_seh___except_filter"]={
["err_seh___except_filter"]={
Line 2,966: Line 3,570:
[f]="%0 only allowed in __except filter expression",
[f]="%0 only allowed in __except filter expression",
[g]=n,
[g]=n,
[b]="(.*?) only allowed in __except filter expression",
[h]="(.*?) only allowed in __except filter expression",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{Z,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);"},{Z,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);"},{Z,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{v,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]={{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))"}},
[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"}
}
},
},
["err_seh___finally_block"]={
["err_seh___finally_block"]={
Line 2,978: Line 3,585:
[f]="%0 only allowed in __finally block",
[f]="%0 only allowed in __finally block",
[g]=n,
[g]=n,
[b]="(.*?) only allowed in __finally block",
[h]="(.*?) only allowed in __finally block",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{Z,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);"},{Z,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);"},{Z,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]={{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);"}},
[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"}
}
},
},
["err_seh_expected_handler"]={
["err_seh_expected_handler"]={
Line 2,990: Line 3,600:
[f]="expected \'__except\' or \'__finally\' block",
[f]="expected \'__except\' or \'__finally\' block",
[g]=n,
[g]=n,
[b]="expected \'__except\' or \'__finally\' block",
[h]="expected \'__except\' or \'__finally\' block",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{mb,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]={{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));"}},
[o]={
["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"}
}
},
},
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
Line 3,002: Line 3,615:
[f]="cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled",
[f]="cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled",
[g]=n,
[g]=n,
[b]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled",
[h]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled",
[h]=a,
[b]=a,
[j]="Coroutines Issue",
[j]="Coroutines Issue",
[c]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch"},
[c]={"5b050e4a1836",1495492397,"[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]={
["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:34:3: error: cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}
}
},
},
["err_seh_try_outside_functions"]={
["err_seh_try_outside_functions"]={
Line 3,014: Line 3,630:
[f]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[f]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[g]=n,
[g]=n,
[b]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls",
[h]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality"},
[c]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality"},
[k]={{K,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]={{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);"}},
[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"}
}
},
},
["err_seh_try_unsupported"]={
["err_seh_try_unsupported"]={
Line 3,026: Line 3,645:
[f]="SEH \'__try\' is not supported on this target",
[f]="SEH \'__try\' is not supported on this target",
[g]=n,
[g]=n,
[b]="SEH \'__try\' is not supported on this target",
[h]="SEH \'__try\' is not supported on this target",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"},
[c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"},
[k]={{K,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]={{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);"}}
},
},
["err_selected_explicit_constructor"]={
["err_selected_explicit_constructor"]={
Line 3,038: Line 3,657:
[f]="chosen constructor is explicit in copy-initialization",
[f]="chosen constructor is explicit in copy-initialization",
[g]=n,
[g]=n,
[b]="chosen constructor is explicit in copy\\-initialization",
[h]="chosen constructor is explicit in copy\\-initialization",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120."},
[c]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120."},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_selector_element_const_type"]={
["err_selector_element_const_type"]={
Line 3,050: Line 3,672:
[f]="selector element of type %0 cannot be a constant lvalue expression",
[f]="selector element of type %0 cannot be a constant lvalue expression",
[g]=n,
[g]=n,
[b]="selector element of type (.*?) cannot be a constant lvalue expression",
[h]="selector element of type (.*?) cannot be a constant lvalue expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"},
[c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"},
[k]={{K,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]={{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();"}},
[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"}
}
},
},
["err_selector_element_not_lvalue"]={
["err_selector_element_not_lvalue"]={
Line 3,062: Line 3,687:
[f]="selector element is not a valid lvalue",
[f]="selector element is not a valid lvalue",
[g]=n,
[g]=n,
[b]="selector element is not a valid lvalue",
[h]="selector element is not a valid lvalue",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{K,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]={{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());"}},
[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"}
}
},
},
["err_selector_element_type"]={
["err_selector_element_type"]={
Line 3,074: Line 3,702:
[f]="selector element type %0 is not a valid object",
[f]="selector element type %0 is not a valid object",
[g]=n,
[g]=n,
[b]="selector element type (.*?) is not a valid object",
[h]="selector element type (.*?) is not a valid object",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{K,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]={{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());"}},
[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"}
}
},
},
["err_setter_type_void"]={
["err_setter_type_void"]={
Line 3,086: Line 3,717:
[f]="type of setter must be void",
[f]="type of setter must be void",
[g]=n,
[g]=n,
[b]="type of setter must be void",
[h]="type of setter must be void",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{Q,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]={{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);"}}
},
},
["err_setting_eval_method_used_in_unsafe_context"]={
["err_setting_eval_method_used_in_unsafe_context"]={
Line 3,098: Line 3,729:
[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",
[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]=n,
[g]=n,
[b]="(?:\'\\#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\')",
[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\')",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={qb,1620118562,vb},
[c]={Hb,1620118562,Kb},
[k]={{B,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;"},{B,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;"},{B,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;"},{B,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]={{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;"}}
},
},
["err_shared_var_init"]={
["err_shared_var_init"]={
Line 3,110: Line 3,741:
[f]="initialization is not supported for __shared__ variables.",
[f]="initialization is not supported for __shared__ variables.",
[g]=n,
[g]=n,
[b]="initialization is not supported for __shared__ variables\\.",
[h]="initialization is not supported for __shared__ variables\\.",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables."},
[c]={"97c01c35f8da",1454452188,"[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]={
["clang/test/SemaCUDA/union-init.cu"]={"clang/test/SemaCUDA/union-init.cu:40:16: error: initialization is not supported for __shared__ variables.","clang/test/SemaCUDA/union-init.cu:42:16: error: initialization is not supported for __shared__ variables."}
}
},
},
["err_shift_rhs_only_vector"]={
["err_shift_rhs_only_vector"]={
Line 3,122: Line 3,756:
[f]="requested shift is a vector of type %0 but the first operand is not a vector (%1)",
[f]="requested shift is a vector of type %0 but the first operand is not a vector (%1)",
[g]=n,
[g]=n,
[b]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)",
[h]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[k]={{p,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]={{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();"}},
[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\')"}
}
},
},
["err_shufflevector_argument_too_large"]={
["err_shufflevector_argument_too_large"]={
Line 3,134: Line 3,771:
[f]="index for __builtin_shufflevector must be less than the total number of vector elements",
[f]="index for __builtin_shufflevector must be less than the total number of vector elements",
[g]=n,
[g]=n,
[b]="index for __builtin_shufflevector must be less than the total number of vector elements",
[h]="index for __builtin_shufflevector must be less than the total number of vector elements",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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]={
["clang/test/SemaTemplate/instantiate-clang.cpp"]={"clang/test/SemaTemplate/instantiate-clang.cpp:34:11: error: index for __builtin_shufflevector must be less than the total number of vector elements","clang/test/SemaTemplate/instantiate-clang.cpp:35:11: error: index for __builtin_shufflevector must be less than the total number of vector elements"}
}
},
},
["err_shufflevector_nonconstant_argument"]={
["err_shufflevector_nonconstant_argument"]={
Line 3,146: Line 3,786:
[f]="index for __builtin_shufflevector must be a constant integer",
[f]="index for __builtin_shufflevector must be a constant integer",
[g]=n,
[g]=n,
[b]="index for __builtin_shufflevector must be a constant integer",
[h]="index for __builtin_shufflevector must be a constant integer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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"]={
Line 3,158: Line 3,798:
[f]="range-based \'for\' statement uses \':\', not \'=\'",
[f]="range-based \'for\' statement uses \':\', not \'=\'",
[g]=n,
[g]=n,
[b]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'",
[h]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration"},
[c]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration"},
[k]={{R,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]={{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, \":\");"}}
},
},
["err_size_t_literal_too_large"]={
["err_size_t_literal_too_large"]={
Line 3,170: Line 3,810:
[f]="%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values",
[f]="%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values",
[g]=n,
[g]=n,
[b]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values",
[h]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_sizeless_in_exception_spec"]={
["err_sizeless_in_exception_spec"]={
Line 3,182: Line 3,825:
[f]="%select{|reference to }0sizeless type %1 is not allowed in exception specification",
[f]="%select{|reference to }0sizeless type %1 is not allowed in exception specification",
[g]=n,
[g]=n,
[b]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification",
[h]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[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]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:310:28: error: sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification","clang/test/SemaCXX/sizeless-1.cpp:312:38: error: reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification"}
}
},
},
["err_sizeless_nonlocal"]={
["err_sizeless_nonlocal"]={
Line 3,194: Line 3,840:
[f]="non-local variable with sizeless type %0",
[f]="non-local variable with sizeless type %0",
[g]=n,
[g]=n,
[b]="non\\-local variable with sizeless type (.*?)",
[h]="non\\-local variable with sizeless type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{t,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]={
["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:8:10: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:9:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:10:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:11:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:57:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
}
},
},
["err_sizeof_alignof_function_type"]={
["err_sizeof_alignof_function_type"]={
Line 3,206: Line 3,855:
[f]="invalid application of \'%0\' to a function type",
[f]="invalid application of \'%0\' to a function type",
[g]=n,
[g]=n,
[b]="invalid application of \'(.*?)\' to a function type",
[h]="invalid application of \'(.*?)\' to a function type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++."},
[c]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++."},
[k]={{p,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();"},{p,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]={{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;"}},
[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"}
}
},
},
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
Line 3,218: Line 3,870:
[f]="invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2",
[f]="invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2",
[g]=n,
[g]=n,
[b]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)",
[h]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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()))"},{p,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()))"},{p,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]={{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))"}},
[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[]\'"}
}
},
},
["err_sizeof_alignof_typeof_bitfield"]={
["err_sizeof_alignof_typeof_bitfield"]={
Line 3,230: Line 3,885:
[f]="invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field",
[f]="invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field",
[g]=n,
[g]=n,
[b]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field",
[h]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[k]={{p,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();"},{p,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;"},{F,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]={{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);"}},
[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"}
}
},
},
["err_sizeof_nonfragile_interface"]={
["err_sizeof_nonfragile_interface"]={
Line 3,242: Line 3,900:
[f]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform",
[f]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform",
[g]=n,
[g]=n,
[b]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform",
[h]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when"},
[c]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when"},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_sizeof_pack_no_pack_name"]={
["err_sizeof_pack_no_pack_name"]={
Line 3,254: Line 3,915:
[f]="%0 does not refer to the name of a parameter pack",
[f]="%0 does not refer to the name of a parameter pack",
[g]=n,
[g]=n,
[b]="(.*?) does not refer to the name of a parameter pack",
[h]="(.*?) does not refer to the name of a parameter pack",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[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]={
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:30:43: error: \'Value\' does not refer to the name of a parameter pack"}
}
},
},
["err_sizeof_pack_no_pack_name_suggest"]={
["err_sizeof_pack_no_pack_name_suggest"]={
Line 3,266: Line 3,930:
[f]="%0 does not refer to the name of a parameter pack; did you mean %1?",
[f]="%0 does not refer to the name of a parameter pack; did you mean %1?",
[g]=n,
[g]=n,
[b]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?",
[h]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[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]={
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:43: error: \'Type\' does not refer to the name of a parameter pack; did you mean \'Types\'?"}
}
},
},
["err_sizeof_parameter_pack"]={
["err_sizeof_parameter_pack"]={
Line 3,278: Line 3,945:
[f]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[f]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[g]=n,
[g]=n,
[b]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression",
[h]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[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);"}}
Line 3,290: Line 3,957:
[f]="-mharden-sls is only supported on armv7-a or later",
[f]="-mharden-sls is only supported on armv7-a or later",
[g]=n,
[g]=n,
[b]="\\-mharden\\-sls is only supported on armv7\\-a or later",
[h]="\\-mharden\\-sls is only supported on armv7\\-a or later",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{nb,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]={{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);"}}
},
},
["err_spaceship_argument_narrowing"]={
["err_spaceship_argument_narrowing"]={
Line 3,302: Line 3,969:
[f]="argument to \'operator<=>\' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0",
[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]=n,
[g]=n,
[b]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
[h]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[k]={{p,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;"},{p,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]={{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;"}},
[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\'"}
}
},
},
["err_spec_member_not_instantiated"]={
["err_spec_member_not_instantiated"]={
Line 3,314: Line 3,984:
[f]="specialization of member %q0 does not specialize an instantiated member",
[f]="specialization of member %q0 does not specialize an instantiated member",
[g]=n,
[g]=n,
[b]="specialization of member (.*?) does not specialize an instantiated member",
[h]="specialization of member (.*?) does not specialize an instantiated member",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep"},
[c]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep"},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_specialization_after_instantiation"]={
["err_specialization_after_instantiation"]={
Line 3,326: Line 3,999:
[f]="explicit specialization of %0 after instantiation",
[f]="explicit specialization of %0 after instantiation",
[g]=n,
[g]=n,
[b]="explicit specialization of (.*?) after instantiation",
[h]="explicit specialization of (.*?) after instantiation",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[c]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[k]={{q,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;"},{q,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;"},{q,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]={{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;"}},
[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"}
}
},
},
["err_specialization_not_primary_template"]={
["err_specialization_not_primary_template"]={
Line 3,338: Line 4,014:
[f]="cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization",
[f]="cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization",
[g]=n,
[g]=n,
[b]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization",
[h]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple."},
[c]={"e6d4b773dea2",1496803347,"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);"}}
Line 3,350: Line 4,026:
[f]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
[f]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
[g]=n,
[g]=n,
[b]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
[h]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"},
[c]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_stack_tagging_requires_hardware_feature"]={
["err_stack_tagging_requires_hardware_feature"]={
Line 3,362: Line 4,041:
[f]="\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag",
[f]="\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag",
[g]=n,
[g]=n,
[b]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag",
[h]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"},
[c]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"},
Line 3,374: Line 4,053:
[f]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
[f]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
[g]=n,
[g]=n,
[b]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
[h]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."},
[c]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."},
[k]={{t,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]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:11:8: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:13:29: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:23:29: error: forward declaration of struct cannot have a nested name specifier"}
}
},
},
["err_static_assert_expression_is_not_constant"]={
["err_static_assert_expression_is_not_constant"]={
Line 3,386: Line 4,068:
[f]="static assertion expression is not an integral constant expression",
[f]="static assertion expression is not an integral constant expression",
[g]=n,
[g]=n,
[b]="static assertion expression is not an integral constant expression",
[h]="static assertion expression is not an integral constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{y,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]={{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())"}},
[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"}
}
},
},
["err_static_assert_failed"]={
["err_static_assert_failed"]={
Line 3,398: Line 4,083:
[f]="static assertion failed%select{: %1|}0",
[f]="static assertion failed%select{: %1|}0",
[g]=n,
[g]=n,
[b]="static assertion failed(?:\\: (.*?)|)",
[h]="static assertion failed(?:\\: (.*?)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{y,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();"},{y,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]={{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();"}},
[o]={
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "}
}
},
},
["err_static_assert_invalid_mem_fn_ret_ty"]={
["err_static_assert_invalid_mem_fn_ret_ty"]={
Line 3,410: Line 4,098:
[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\'",
[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]=n,
[g]=n,
[b]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'",
[h]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,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=*/{});"},{y,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;"},{y,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]={{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;"}},
[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 *\'"}
}
},
},
["err_static_assert_invalid_message"]={
["err_static_assert_invalid_message"]={
Line 3,422: Line 4,113:
[f]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[f]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[g]=n,
[g]=n,
[b]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions",
[h]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_static_assert_message_constexpr"]={
["err_static_assert_message_constexpr"]={
Line 3,434: Line 4,128:
[f]="the message in a static assertion must be produced by a constant expression",
[f]="the message in a static assertion must be produced by a constant expression",
[g]=n,
[g]=n,
[b]="the message in a static assertion must be produced by a constant expression",
[h]="the message in a static assertion must be produced by a constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_static_assert_missing_member_function"]={
["err_static_assert_missing_member_function"]={
Line 3,446: Line 4,143:
[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",
[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]=n,
[g]=n,
[b]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)",
[h]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_static_assert_requirement_failed"]={
["err_static_assert_requirement_failed"]={
Line 3,458: Line 4,158:
[f]="static assertion failed due to requirement \'%0\'%select{: %2|}1",
[f]="static assertion failed due to requirement \'%0\'%select{: %2|}1",
[g]=n,
[g]=n,
[b]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)",
[h]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."},
[c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."},
[k]={{y,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]={{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();"}},
[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\': "}
}
},
},
["err_static_block_func"]={
["err_static_block_func"]={
Line 3,470: Line 4,173:
[f]="function declared in block scope cannot have \'static\' storage class",
[f]="function declared in block scope cannot have \'static\' storage class",
[g]=n,
[g]=n,
[b]="function declared in block scope cannot have \'static\' storage class",
[h]="function declared in block scope cannot have \'static\' storage class",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:58:3: error: function declared in block scope cannot have \'static\' storage class"}
}
},
},
["err_static_data_member_not_allowed_in_anon_struct"]={
["err_static_data_member_not_allowed_in_anon_struct"]={
Line 3,482: Line 4,188:
[f]="static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1",
[f]="static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1",
[g]=n,
[g]=n,
[b]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)",
[h]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[c]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[k]={{t,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]={
["clang/test/CXX/class/class.union/p2-0x.cpp"]={"clang/test/CXX/class/class.union/p2-0x.cpp:40:22: error: static data member \'n\' not allowed in anonymous union","clang/test/CXX/class/class.union/p2-0x.cpp:46:20: error: static data member \'k\' not allowed in anonymous union"}
}
},
},
["err_static_data_member_not_allowed_in_local_class"]={
["err_static_data_member_not_allowed_in_local_class"]={
Line 3,494: Line 4,203:
[f]="static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1",
[f]="static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1",
[g]=n,
[g]=n,
[b]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)",
[h]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."},
[c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."},
[k]={{t,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]={
["clang/test/SemaCXX/blocks.cpp"]={"clang/test/SemaCXX/blocks.cpp:160:18: error: static data member \'x\' not allowed in local class \'X\'","clang/test/SemaCXX/blocks.cpp:164:20: error: static data member \'z\' not allowed in local struct \'Z\'"}
}
},
},
["err_static_data_member_reinitialization"]={
["err_static_data_member_reinitialization"]={
Line 3,506: Line 4,218:
[f]="static data member %0 already has an initializer",
[f]="static data member %0 already has an initializer",
[g]=n,
[g]=n,
[b]="static data member (.*?) already has an initializer",
[h]="static data member (.*?) already has an initializer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"},
[c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"},
[k]={{t,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]={
["clang/test/CXX/class/class.static/class.static.data/p4.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p4.cpp:15:63: error: static data member \'i\' already has an initializer","clang/test/CXX/class/class.static/class.static.data/p4.cpp:20:62: error: static data member \'i\' already has an initializer"}
}
},
},
["err_static_downcast_via_virtual"]={
["err_static_downcast_via_virtual"]={
Line 3,518: Line 4,233:
[f]="cannot cast %0 to %1 via virtual base %2",
[f]="cannot cast %0 to %1 via virtual base %2",
[g]=n,
[g]=n,
[b]="cannot cast (.*?) to (.*?) via virtual base (.*?)",
[h]="cannot cast (.*?) to (.*?) via virtual base (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{eb,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]={{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;"}},
[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\'"}
}
},
},
["err_static_function_scope"]={
["err_static_function_scope"]={
Line 3,530: Line 4,248:
[f]="variables in function scope cannot be declared static",
[f]="variables in function scope cannot be declared static",
[g]=n,
[g]=n,
[b]="variables in function scope cannot be declared static",
[h]="variables in function scope cannot be declared static",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[k]={{t,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]={
["clang/test/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:117:14: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:124:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:170:16: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:177:25: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:182:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:189:22: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:198:24: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:207:24: error: variables in function scope cannot be declared static"}
}
},
},
["err_static_illegal_in_new"]={
["err_static_illegal_in_new"]={
Line 3,542: Line 4,263:
[f]="the \'static\' modifier for the array size is not legal in new expressions",
[f]="the \'static\' modifier for the array size is not legal in new expressions",
[g]=n,
[g]=n,
[b]="the \'static\' modifier for the array size is not legal in new expressions",
[h]="the \'static\' modifier for the array size is not legal in new expressions",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{E,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]={{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());"}}
},
},
["err_static_kernel"]={
["err_static_kernel"]={
Line 3,554: Line 4,275:
[f]="kernel functions cannot be declared static",
[f]="kernel functions cannot be declared static",
[g]=n,
[g]=n,
[b]="kernel functions cannot be declared static",
[h]="kernel functions cannot be declared static",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[k]={{t,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]={
["clang/test/SemaOpenCL/storageclass-cl20.cl"]={"clang/test/SemaOpenCL/storageclass-cl20.cl:22:20: error: kernel functions cannot be declared static"}
}
},
},
["err_static_lambda"]={
["err_static_lambda"]={
Line 3,568: Line 4,292:
[f]="static lambdas are a C++23 extension",
[f]="static lambdas are a C++23 extension",
[g]="(?:warning|error|fatal error)\\: ",
[g]="(?:warning|error|fatal error)\\: ",
[b]="static lambdas are a C\\+\\+23 extension",
[h]="static lambdas are a C\\+\\+23 extension",
[h]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]",
[b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]",
[j]=u,
[j]=v,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{cb,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]={{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);"}},
[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]"}
}
},
},
["err_static_lambda_captures"]={
["err_static_lambda_captures"]={
Line 3,580: Line 4,307:
[f]="a static lambda cannot have any captures",
[f]="a static lambda cannot have any captures",
[g]=n,
[g]=n,
[b]="a static lambda cannot have any captures",
[h]="a static lambda cannot have any captures",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{cb,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]={{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);"}},
[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"}
}
},
},
["err_static_main"]={
["err_static_main"]={
Line 3,592: Line 4,322:
[f]="\'main\' is not allowed to be declared static",
[f]="\'main\' is not allowed to be declared static",
[g]=n,
[g]=n,
[b]="\'main\' is not allowed to be declared static",
[h]="\'main\' is not allowed to be declared static",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."},
[c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."},
[k]={{t,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]={
["clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:10:1: error: \'main\' is not allowed to be declared static"}
}
},
},
["err_static_mutable_lambda"]={
["err_static_mutable_lambda"]={
Line 3,604: Line 4,337:
[f]="lambda cannot be both mutable and static",
[f]="lambda cannot be both mutable and static",
[g]=n,
[g]=n,
[b]="lambda cannot be both mutable and static",
[h]="lambda cannot be both mutable and static",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{cb,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]={{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);"}},
[o]={
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"}
}
},
},
["err_static_non_static"]={
["err_static_non_static"]={
Line 3,616: Line 4,352:
[f]="static declaration of %0 follows non-static declaration",
[f]="static declaration of %0 follows non-static declaration",
[g]=n,
[g]=n,
[b]="static declaration of (.*?) follows non\\-static declaration",
[h]="static declaration of (.*?) follows non\\-static declaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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;"},{t,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]={
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: error: static declaration of \'operator delete\' follows non-static declaration"}
}
},
},
["err_static_not_bitfield"]={
["err_static_not_bitfield"]={
Line 3,628: Line 4,367:
[f]="static member %0 cannot be a bit-field",
[f]="static member %0 cannot be a bit-field",
[g]=n,
[g]=n,
[b]="static member (.*?) cannot be a bit\\-field",
[h]="static member (.*?) cannot be a bit\\-field",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{y,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]={{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();"}},
[o]={
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"}
}
},
},
["err_static_out_of_line"]={
["err_static_out_of_line"]={
Line 3,640: Line 4,382:
[f]="\'static\' can only be specified inside the class definition",
[f]="\'static\' can only be specified inside the class definition",
[g]=n,
[g]=n,
[b]="\'static\' can only be specified inside the class definition",
[h]="\'static\' can only be specified inside the class definition",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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());"},{t,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]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:32:12: error: \'static\' can only be specified inside the class definition"}
}
},
},
["err_static_overrides_virtual"]={
["err_static_overrides_virtual"]={
Line 3,652: Line 4,397:
[f]="\'static\' member function %0 overrides a virtual function in a base class",
[f]="\'static\' member function %0 overrides a virtual function in a base class",
[g]=n,
[g]=n,
[b]="\'static\' member function (.*?) overrides a virtual function in a base class",
[h]="\'static\' member function (.*?) overrides a virtual function in a base class",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function"},
[c]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function"},
[k]={{y,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]={{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; }))"}},
[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"}
}
},
},
["err_statically_allocated_object"]={
["err_statically_allocated_object"]={
Line 3,664: Line 4,412:
[f]="interface type cannot be statically allocated",
[f]="interface type cannot be statically allocated",
[g]=n,
[g]=n,
[b]="interface type cannot be statically allocated",
[h]="interface type cannot be statically allocated",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{t,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{t,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(), \"*\");"},{Q,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(), \"*\");"},{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, \"*\");"}},
[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"}
}
},
},
["err_std_compare_type_not_supported"]={
["err_std_compare_type_not_supported"]={
Line 3,676: Line 4,427:
[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",
[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]=n,
[g]=n,
[b]="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)",
[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)",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_std_source_location_impl_malformed"]={
["err_std_source_location_impl_malformed"]={
Line 3,688: Line 4,442:
[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\'",
[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]=n,
[g]=n,
[b]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[h]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={qb,1620118562,vb},
[c]={Hb,1620118562,Kb},
[k]={{p,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);"},{p,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (Count != 4) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}}
[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);"}},
[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\'"}
}
},
},
["err_std_source_location_impl_not_found"]={
["err_std_source_location_impl_not_found"]={
Line 3,700: Line 4,457:
[f]="\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[f]="\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[g]=n,
[g]=n,
[b]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[h]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={qb,1620118562,vb},
[c]={Hb,1620118562,Kb},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_std_type_trait_not_class_template"]={
["err_std_type_trait_not_class_template"]={
Line 3,712: Line 4,472:
[f]="unsupported standard library implementation: \'std::%0\' is not a class template",
[f]="unsupported standard library implementation: \'std::%0\' is not a class template",
[g]=n,
[g]=n,
[b]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template",
[h]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[c]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[k]={{y,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]={{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;"}}
},
},
["err_stmt_expr_in_default_arg"]={
["err_stmt_expr_in_default_arg"]={
Line 3,724: Line 4,484:
[f]="default %select{argument|non-type template argument}0 may not use a GNU statement expression",
[f]="default %select{argument|non-type template argument}0 may not use a GNU statement expression",
[g]=n,
[g]=n,
[b]="default (?:argument|non\\-type template argument) may not use a GNU statement expression",
[h]="default (?:argument|non\\-type template argument) may not use a GNU statement expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={qb,1620118562,vb},
[c]={Hb,1620118562,Kb},
[k]={{R,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;"},{rb,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]={{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;"}},
[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"}
}
},
},
["err_stmtexpr_file_scope"]={
["err_stmtexpr_file_scope"]={
Line 3,736: Line 4,499:
[f]="statement expression not allowed at file scope",
[f]="statement expression not allowed at file scope",
[g]=n,
[g]=n,
[b]="statement expression not allowed at file scope",
[h]="statement expression not allowed at file scope",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[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]={
["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:24:11: error: statement expression not allowed at file scope"}
}
},
},
["err_storage_class_for_static_member"]={
["err_storage_class_for_static_member"]={
Line 3,748: Line 4,514:
[f]="static data member definition cannot specify a storage class",
[f]="static data member definition cannot specify a storage class",
[g]=n,
[g]=n,
[b]="static data member definition cannot specify a storage class",
[h]="static data member definition cannot specify a storage class",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"45f96f87c3cf",1371649314,"Fix pr16354."},
[c]={"45f96f87c3cf",1371649314,"Fix pr16354."},
[k]={{t,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]={
["clang/test/SemaCXX/static-data-member.cpp"]={"clang/test/SemaCXX/static-data-member.cpp:13:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:15:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:16:1: error: static data member definition cannot specify a storage class"}
}
},
},
["err_storage_spec_on_catch_parm"]={
["err_storage_spec_on_catch_parm"]={
Line 3,760: Line 4,529:
[f]="@catch parameter cannot have storage specifier \'%0\'",
[f]="@catch parameter cannot have storage specifier \'%0\'",
[g]=n,
[g]=n,
[b]="@catch parameter cannot have storage specifier \'(.*?)\'",
[h]="@catch parameter cannot have storage specifier \'(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[k]={{Y,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]={{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);"}},
[o]={
["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"}
}
},
},
["err_storageclass_invalid_for_member"]={
["err_storageclass_invalid_for_member"]={
Line 3,772: Line 4,544:
[f]="storage class specified for a member declaration",
[f]="storage class specified for a member declaration",
[g]=n,
[g]=n,
[b]="storage class specified for a member declaration",
[h]="storage class specified for a member declaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{y,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]={{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);"}},
[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"}
}
},
},
["err_store_value_to_reg"]={
["err_store_value_to_reg"]={
Line 3,784: Line 4,559:
[f]="impossible constraint in asm: can\'t store value into a register",
[f]="impossible constraint in asm: can\'t store value into a register",
[g]=n,
[g]=n,
[b]="impossible constraint in asm\\: can\'t store value into a register",
[h]="impossible constraint in asm\\: can\'t store value into a register",
[h]=a,
[b]=a,
[j]="Inline Assembly Issue",
[j]="Inline Assembly Issue",
[c]={qb,1620118562,vb},
[c]={Hb,1620118562,Kb},
[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]={
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:362:20: error: impossible constraint in asm: can\'t store value into a register"}
}
},
},
["err_string_concat_mixed_suffix"]={
["err_string_concat_mixed_suffix"]={
Line 3,796: Line 4,574:
[f]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation",
[f]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation",
[g]=n,
[g]=n,
[b]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation",
[h]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token"},
[c]={"e18f0faff242",1330920135,"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]={
["clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp:10:13: error: differing user-defined suffixes (\'_x\' and \'_y\') in string literal concatenation"}
}
},
},
["err_strong_property"]={
["err_strong_property"]={
Line 3,808: Line 4,589:
[f]="existing instance variable %1 for strong property %0 may not be __weak",
[f]="existing instance variable %1 for strong property %0 may not be __weak",
[g]=n,
[g]=n,
[b]="existing instance variable (.*?) for strong property (.*?) may not be __weak",
[h]="existing instance variable (.*?) for strong property (.*?) may not be __weak",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{Q,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]={{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();"}},
[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"}
}
},
},
["err_subscript_function_type"]={
["err_subscript_function_type"]={
Line 3,820: Line 4,604:
[f]="subscript of pointer to function type %0",
[f]="subscript of pointer to function type %0",
[g]=n,
[g]=n,
[b]="subscript of pointer to function type (.*?)",
[h]="subscript of pointer to function type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for"},
[c]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for"},
[k]={{p,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]={{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();"}}
},
},
["err_subscript_incomplete_or_sizeless_type"]={
["err_subscript_incomplete_or_sizeless_type"]={
Line 3,832: Line 4,616:
[f]="subscript of pointer to %select{incomplete|sizeless}0 type %1",
[f]="subscript of pointer to %select{incomplete|sizeless}0 type %1",
[g]=n,
[g]=n,
[b]="subscript of pointer to (?:incomplete|sizeless) type (.*?)",
[h]="subscript of pointer to (?:incomplete|sizeless) type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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))"}},
[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[]\'"}
}
},
},
["err_subscript_nonfragile_interface"]={
["err_subscript_nonfragile_interface"]={
Line 3,844: Line 4,631:
[f]="subscript requires size of interface %0, which is not constant for this architecture and platform",
[f]="subscript requires size of interface %0, which is not constant for this architecture and platform",
[g]=n,
[g]=n,
[b]="subscript requires size of interface (.*?), which is not constant for this architecture and platform",
[h]="subscript requires size of interface (.*?), which is not constant for this architecture and platform",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"},
[c]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"},
[k]={{p,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]={{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();"}}
},
},
["err_subscript_svbool_t"]={
["err_subscript_svbool_t"]={
Line 3,856: Line 4,643:
[f]="subscript of svbool_t is not allowed",
[f]="subscript of svbool_t is not allowed",
[g]=n,
[g]=n,
[b]="subscript of svbool_t is not allowed",
[h]="subscript of svbool_t is not allowed",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{p,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]={{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());"}},
[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"}
}
},
},
["err_super_in_lambda_unsupported"]={
["err_super_in_lambda_unsupported"]={
Line 3,868: Line 4,658:
[f]="use of \'__super\' inside a lambda is unsupported",
[f]="use of \'__super\' inside a lambda is unsupported",
[g]=n,
[g]=n,
[b]="use of \'__super\' inside a lambda is unsupported",
[h]="use of \'__super\' inside a lambda is unsupported",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[c]={"67860249e064",1411691300,"-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]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:12:23: error: use of \'__super\' inside a lambda is unsupported"}
}
},
},
["err_super_in_using_declaration"]={
["err_super_in_using_declaration"]={
Line 3,880: Line 4,673:
[f]="\'__super\' cannot be used with a using declaration",
[f]="\'__super\' cannot be used with a using declaration",
[g]=n,
[g]=n,
[b]="\'__super\' cannot be used with a using declaration",
[h]="\'__super\' cannot be used with a using declaration",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[k]={{bb,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]={{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);"}},
[o]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"}
}
},
},
["err_sve_vector_in_non_sve_target"]={
["err_sve_vector_in_non_sve_target"]={
Line 3,892: Line 4,688:
[f]="SVE vector type %0 cannot be used in a target without sve",
[f]="SVE vector type %0 cannot be used in a target without sve",
[g]=n,
[g]=n,
[b]="SVE vector type (.*?) cannot be used in a target without sve",
[h]="SVE vector type (.*?) cannot be used in a target without sve",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{hb,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;"},{t,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]={{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;"}},
[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"}
}
},
},
["err_swift_abi_parameter_wrong_type"]={
["err_swift_abi_parameter_wrong_type"]={
Line 3,904: Line 4,703:
[f]="\'%0\' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2",
[f]="\'%0\' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2",
[g]=n,
[g]=n,
[b]="\'(.*?)\' parameter must have pointer(?:| to unqualified pointer) type; type here is (.*?)",
[h]="\'(.*?)\' parameter must have pointer(?:| to unqualified pointer) type; type here is (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{O,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;"},{O,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;"},{O,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;"},{O,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]={{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;"}},
[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\'"}
}
},
},
["err_swift_async_bad_block_type"]={
["err_swift_async_bad_block_type"]={
Line 3,916: Line 4,718:
[f]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is %0",
[f]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is %0",
[g]=n,
[g]=n,
[b]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is (.*?)",
[h]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{O,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();"},{O,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]={{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();"}},
[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 (^)()\'"}
}
},
},
["err_swift_async_error_no_error_parameter"]={
["err_swift_async_error_no_error_parameter"]={
Line 3,928: Line 4,733:
[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",
[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]=n,
[g]=n,
[b]="(.*?) attribute with \'nonnull_error\' convention can only be applied to a (?:function|method) with a completion handler with an error parameter",
[h]="(.*?) attribute with \'nonnull_error\' convention can only be applied to a (?:function|method) with a completion handler with an error parameter",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{O,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]={{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);"}},
[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"}
}
},
},
["err_swift_async_error_non_integral"]={
["err_swift_async_error_non_integral"]={
Line 3,940: Line 4,748:
[f]="%0 attribute with \'%1\' convention must have an integral-typed parameter in completion handler at index %2, type here is %3",
[f]="%0 attribute with \'%1\' convention must have an integral-typed parameter in completion handler at index %2, type here is %3",
[g]=n,
[g]=n,
[b]="(.*?) attribute with \'(.*?)\' convention must have an integral\\-typed parameter in completion handler at index (.*?), type here is (.*?)",
[h]="(.*?) attribute with \'(.*?)\' convention must have an integral\\-typed parameter in completion handler at index (.*?), type here is (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{O,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]={{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;"}},
[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\'"}
}
},
},
["err_swift_async_error_without_swift_async"]={
["err_swift_async_error_without_swift_async"]={
Line 3,952: Line 4,763:
[f]="%0 attribute must be applied to a %select{function|method}1 annotated with non-\'none\' attribute \'swift_async\'",
[f]="%0 attribute must be applied to a %select{function|method}1 annotated with non-\'none\' attribute \'swift_async\'",
[g]=n,
[g]=n,
[b]="(.*?) attribute must be applied to a (?:function|method) annotated with non\\-\'none\' attribute \'swift_async\'",
[h]="(.*?) attribute must be applied to a (?:function|method) annotated with non\\-\'none\' attribute \'swift_async\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{O,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]={{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);"}}
},
},
["err_swift_async_no_access"]={
["err_swift_async_no_access"]={
Line 3,964: Line 4,775:
[f]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[f]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[g]=n,
[g]=n,
[b]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[h]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{O,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]={{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;"}},
[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\'"}
}
},
},
["err_swift_error_result_not_after_swift_context"]={
["err_swift_error_result_not_after_swift_context"]={
Line 3,976: Line 4,790:
[f]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[f]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[g]=n,
[g]=n,
[b]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[h]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{F,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]={{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);"}},
[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"}
}
},
},
["err_swift_indirect_result_not_first"]={
["err_swift_indirect_result_not_first"]={
Line 3,988: Line 4,805:
[f]="\'swift_indirect_result\' parameters must be first parameters of function",
[f]="\'swift_indirect_result\' parameters must be first parameters of function",
[g]=n,
[g]=n,
[b]="\'swift_indirect_result\' parameters must be first parameters of function",
[h]="\'swift_indirect_result\' parameters must be first parameters of function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{F,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]={{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);"}},
[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"}
}
},
},
["err_swift_param_attr_not_swiftcall"]={
["err_swift_param_attr_not_swiftcall"]={
Line 4,000: Line 4,820:
[f]="\'%0\' parameter can only be used with swiftcall%select{ or swiftasynccall|}1 calling convention%select{|s}1",
[f]="\'%0\' parameter can only be used with swiftcall%select{ or swiftasynccall|}1 calling convention%select{|s}1",
[g]=n,
[g]=n,
[b]="\'(.*?)\' parameter can only be used with swiftcall(?: or swiftasynccall|) calling convention(?:|s)",
[h]="\'(.*?)\' parameter can only be used with swiftcall(?: or swiftasynccall|) calling convention(?:|s)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{F,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]={{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);"}},
[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"}
}
},
},
["err_switch_explicit_conversion"]={
["err_switch_explicit_conversion"]={
Line 4,012: Line 4,835:
[f]="switch condition type %0 requires explicit conversion to %1",
[f]="switch condition type %0 requires explicit conversion to %1",
[g]=n,
[g]=n,
[b]="switch condition type (.*?) requires explicit conversion to (.*?)",
[h]="switch condition type (.*?) requires explicit conversion to (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[k]={{K,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]={{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; }"}},
[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\'"}
}
},
},
["err_switch_incomplete_class_type"]={
["err_switch_incomplete_class_type"]={
Line 4,024: Line 4,850:
[f]="switch condition has incomplete class type %0",
[f]="switch condition has incomplete class type %0",
[g]=n,
[g]=n,
[b]="switch condition has incomplete class type (.*?)",
[h]="switch condition has incomplete class type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion"},
[c]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion"},
[k]={{K,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]={{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(); }"}},
[o]={
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"}
}
},
},
["err_switch_into_protected_scope"]={
["err_switch_into_protected_scope"]={
Line 4,036: Line 4,865:
[f]="cannot jump from switch statement to this case label",
[f]="cannot jump from switch statement to this case label",
[g]=n,
[g]=n,
[b]="cannot jump from switch statement to this case label",
[h]="cannot jump from switch statement to this case label",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors."},
[c]={"7535f41c6673",1240083757,"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]={
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:20:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:44:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:63:3: error: cannot jump from switch statement to this case label"}
}
},
},
["err_switch_multiple_conversions"]={
["err_switch_multiple_conversions"]={
Line 4,048: Line 4,880:
[f]="multiple conversions from switch condition type %0 to an integral or enumeration type",
[f]="multiple conversions from switch condition type %0 to an integral or enumeration type",
[g]=n,
[g]=n,
[b]="multiple conversions from switch condition type (.*?) to an integral or enumeration type",
[h]="multiple conversions from switch condition type (.*?) to an integral or enumeration type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[k]={{K,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]={{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; }"}},
[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"}
}
},
},
["err_sycl_special_type_num_init_method"]={
["err_sycl_special_type_num_init_method"]={
Line 4,060: Line 4,895:
[f]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[f]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[g]=n,
[g]=n,
[b]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[h]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={tb,1616787805,sb},
[c]={Fb,1616787805,Gb},
[k]={{t,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]={
["clang/test/SemaSYCL/special-class-attribute.cpp"]={"clang/test/SemaSYCL/special-class-attribute.cpp:42:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:45:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:49:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:56:8: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:59:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:78:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:83:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:88:38: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:93:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"}
}
},
},
["err_synthesize_category_decl"]={
["err_synthesize_category_decl"]={
Line 4,072: Line 4,910:
[f]="@synthesize not allowed in a category\'s implementation",
[f]="@synthesize not allowed in a category\'s implementation",
[g]=n,
[g]=n,
[b]="@synthesize not allowed in a category\'s implementation",
[h]="@synthesize not allowed in a category\'s implementation",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{Q,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]={{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);"}},
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"}
}
},
},
["err_synthesize_on_class_property"]={
["err_synthesize_on_class_property"]={
Line 4,084: Line 4,925:
[f]="@synthesize not allowed on a class property %0",
[f]="@synthesize not allowed on a class property %0",
[g]=n,
[g]=n,
[b]="@synthesize not allowed on a class property (.*?)",
[h]="@synthesize not allowed on a class property (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={U,1480718311,V},
[c]={Y,1480718311,X},
[k]={{Q,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]={{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;"}},
[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\'"}
}
},
},
["err_synthesize_variable_sized_ivar"]={
["err_synthesize_variable_sized_ivar"]={
Line 4,096: Line 4,940:
[f]="synthesized property with variable size type %0 requires an existing instance variable",
[f]="synthesized property with variable size type %0 requires an existing instance variable",
[g]=n,
[g]=n,
[b]="synthesized property with variable size type (.*?) requires an existing instance variable",
[h]="synthesized property with variable size type (.*?) requires an existing instance variable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[c]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[k]={{Q,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]={{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;"}},
[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"}
}
},
},
["err_synthesized_property_name"]={
["err_synthesized_property_name"]={
Line 4,108: Line 4,955:
[f]="expected a property name in @synthesize",
[f]="expected a property name in @synthesize",
[g]=n,
[g]=n,
[b]="expected a property name in @synthesize",
[h]="expected a property name in @synthesize",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions"},
[c]={"88e72a0bf662",1258573545,"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]={
["clang/test/Parser/objc-synthesized-recover.m"]={"clang/test/Parser/objc-synthesized-recover.m:13:20: error: expected a property name in @synthesize"}
}
},
},
["err_synthesizing_arc_weak_property_disabled"]={
["err_synthesizing_arc_weak_property_disabled"]={
Line 4,120: Line 4,970:
[f]="cannot synthesize weak property in file using manual reference counting",
[f]="cannot synthesize weak property in file using manual reference counting",
[g]=n,
[g]=n,
[b]="cannot synthesize weak property in file using manual reference counting",
[h]="cannot synthesize weak property in file using manual reference counting",
[h]=a,
[b]=a,
[j]="ARC Weak References",
[j]="ARC Weak References",
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[k]={{Q,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]={{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);"}},
[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"}
}
},
},
["err_synthesizing_arc_weak_property_no_runtime"]={
["err_synthesizing_arc_weak_property_no_runtime"]={
Line 4,132: Line 4,985:
[f]="cannot synthesize weak property because the current deployment target does not support weak references",
[f]="cannot synthesize weak property because the current deployment target does not support weak references",
[g]=n,
[g]=n,
[b]="cannot synthesize weak property because the current deployment target does not support weak references",
[h]="cannot synthesize weak property because the current deployment target does not support weak references",
[h]=a,
[b]=a,
[j]="ARC Weak References",
[j]="ARC Weak References",
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[k]={{Q,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]={{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);"}},
[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"}
}
},
},
["err_systemz_invalid_tabort_code"]={
["err_systemz_invalid_tabort_code"]={
Line 4,144: Line 5,000:
[f]="invalid transaction abort code",
[f]="invalid transaction abort code",
[g]=n,
[g]=n,
[b]="invalid transaction abort code",
[h]="invalid transaction abort code",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"},
[c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"},
[k]={{v,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]={
["clang/test/CodeGen/SystemZ/builtins-systemz-error.c"]={"clang/test/CodeGen/SystemZ/builtins-systemz-error.c:6:21: error: invalid transaction abort code","clang/test/CodeGen/SystemZ/builtins-systemz-error.c:7:21: error: invalid transaction abort code"}
}
},
},
["err_tag_definition_of_typedef"]={
["err_tag_definition_of_typedef"]={
Line 4,156: Line 5,015:
[f]="definition of type %0 conflicts with %select{typedef|type alias}1 of the same name",
[f]="definition of type %0 conflicts with %select{typedef|type alias}1 of the same name",
[g]=n,
[g]=n,
[b]="definition of type (.*?) conflicts with (?:typedef|type alias) of the same name",
[h]="definition of type (.*?) conflicts with (?:typedef|type alias) of the same name",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:17:8: error: definition of type \'Y2\' conflicts with typedef of the same name"}
}
},
},
["err_tag_index_out_of_range"]={
["err_tag_index_out_of_range"]={
Line 4,168: Line 5,030:
[f]="%select{type tag|argument}0 index %1 is greater than the number of arguments specified",
[f]="%select{type tag|argument}0 index %1 is greater than the number of arguments specified",
[g]=n,
[g]=n,
[b]="(?:type tag|argument) index (.*?) is greater than the number of arguments specified",
[h]="(?:type tag|argument) index (.*?) is greater than the number of arguments specified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a..."},
[c]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a..."},
[k]={{v,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();"},{v,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]={
["clang/test/Sema/error-type-safety.cpp"]={"clang/test/Sema/error-type-safety.cpp:45:22: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:46:24: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:47:26: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:48:28: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:50:35: error: argument index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:51:37: error: argument index 4 is greater than the number of arguments specified"}
}
},
},
["err_tag_reference_conflict"]={
["err_tag_reference_conflict"]={
Line 4,180: Line 5,045:
[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",
[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]=n,
[g]=n,
[b]="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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[k]={{t,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]={
["clang/test/SemaCXX/elaborated-type-specifier.cpp"]={"clang/test/SemaCXX/elaborated-type-specifier.cpp:61:10: error: implicit declaration introduced by elaborated type conflicts with a template of the same name"}
}
},
},
["err_tag_reference_non_tag"]={
["err_tag_reference_non_tag"]={
Line 4,192: Line 5,060:
[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",
[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]=n,
[g]=n,
[b]="(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[k]={{t,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;"},{q,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;"},{q,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;"},{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;"}},
[o]={
["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"}
}
},
},
["err_tagless_friend_type_template"]={
["err_tagless_friend_type_template"]={
Line 4,204: Line 5,075:
[f]="friend type templates must use an elaborated type",
[f]="friend type templates must use an elaborated type",
[g]=n,
[g]=n,
[b]="friend type templates must use an elaborated type",
[h]="friend type templates must use an elaborated type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates.  Angst about same."},
[c]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates.  Angst about same."},
[k]={{y,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]={{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();"}},
[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"}
}
},
},
["err_target_clone_doesnt_match"]={
["err_target_clone_doesnt_match"]={
Line 4,216: Line 5,090:
[f]="\'target_clones\' attribute does not match previous declaration",
[f]="\'target_clones\' attribute does not match previous declaration",
[g]=n,
[g]=n,
[b]="\'target_clones\' attribute does not match previous declaration",
[h]="\'target_clones\' attribute does not match previous declaration",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={tb,1616787805,sb},
[c]={Fb,1616787805,Gb},
[k]={{t,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]={
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:27:92: error: \'target_clones\' attribute does not match previous declaration","clang/test/Sema/attr-target-clones-aarch64.c:37:65: error: \'target_clones\' attribute does not match previous declaration"}
}
},
},
["err_target_clone_must_have_default"]={
["err_target_clone_must_have_default"]={
Line 4,228: Line 5,105:
[f]="\'target_clones\' multiversioning requires a default target",
[f]="\'target_clones\' multiversioning requires a default target",
[g]=n,
[g]=n,
[b]="\'target_clones\' multiversioning requires a default target",
[h]="\'target_clones\' multiversioning requires a default target",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={tb,1616787805,sb},
[c]={Fb,1616787805,Gb},
[k]={{O,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]={{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);"}},
[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"}
}
},
},
["err_target_unknown_abi"]={
["err_target_unknown_abi"]={
Line 4,240: Line 5,120:
[f]="unknown target ABI \'%0\'",
[f]="unknown target ABI \'%0\'",
[g]=n,
[g]=n,
[b]="unknown target ABI \'(.*?)\'",
[h]="unknown target ABI \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[k]={{ob,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]={{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;"}}
},
},
["err_target_unknown_cpu"]={
["err_target_unknown_cpu"]={
Line 4,252: Line 5,132:
[f]="unknown target CPU \'%0\'",
[f]="unknown target CPU \'%0\'",
[g]=n,
[g]=n,
[b]="unknown target CPU \'(.*?)\'",
[h]="unknown target CPU \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."},
[c]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."},
[k]={{ob,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;"},{ob,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]={{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;"}},
[o]={
["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"}
}
},
},
["err_target_unknown_fpmath"]={
["err_target_unknown_fpmath"]={
Line 4,264: Line 5,147:
[f]="unknown FP unit \'%0\'",
[f]="unknown FP unit \'%0\'",
[g]=n,
[g]=n,
[b]="unknown FP unit \'(.*?)\'",
[h]="unknown FP unit \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[k]={{ob,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]={{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;"}}
},
},
["err_target_unknown_triple"]={
["err_target_unknown_triple"]={
Line 4,276: Line 5,159:
[f]="unknown target triple \'%0\'",
[f]="unknown target triple \'%0\'",
[g]=n,
[g]=n,
[b]="unknown target triple \'(.*?)\'",
[h]="unknown target triple \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[k]={{ob,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]={{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\";"}}
},
},
["err_target_unsupported_abi"]={
["err_target_unsupported_abi"]={
Line 4,288: Line 5,171:
[f]="ABI \'%0\' is not supported on CPU \'%1\'",
[f]="ABI \'%0\' is not supported on CPU \'%1\'",
[g]=n,
[g]=n,
[b]="ABI \'(.*?)\' is not supported on CPU \'(.*?)\'",
[h]="ABI \'(.*?)\' is not supported on CPU \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."},
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."},
Line 4,300: Line 5,183:
[f]="ABI \'%0\' is not supported for \'%1\'",
[f]="ABI \'%0\' is not supported for \'%1\'",
[g]=n,
[g]=n,
[b]="ABI \'(.*?)\' is not supported for \'(.*?)\'",
[h]="ABI \'(.*?)\' is not supported for \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."}
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."}
Line 4,311: Line 5,194:
[f]="the target architecture \'%0\' is not supported by the target \'%1\'",
[f]="the target architecture \'%0\' is not supported by the target \'%1\'",
[g]=n,
[g]=n,
[b]="the target architecture \'(.*?)\' is not supported by the target \'(.*?)\'",
[h]="the target architecture \'(.*?)\' is not supported by the target \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM"},
[c]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM"},
Line 4,323: Line 5,206:
[f]="micromips is not supported for target CPU \'%0\'",
[f]="micromips is not supported for target CPU \'%0\'",
[g]=n,
[g]=n,
[b]="micromips is not supported for target CPU \'(.*?)\'",
[h]="micromips is not supported for target CPU \'(.*?)\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"},
[c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"},
Line 4,335: Line 5,218:
[f]="execute only is not supported for the %0 sub-architecture",
[f]="execute only is not supported for the %0 sub-architecture",
[g]=n,
[g]=n,
[b]="execute only is not supported for the (.*?) sub\\-architecture",
[h]="execute only is not supported for the (.*?) sub\\-architecture",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen"},
[c]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen"},
[k]={{nb,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]={{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();"}}
},
},
["err_target_unsupported_fpmath"]={
["err_target_unsupported_fpmath"]={
Line 4,347: Line 5,230:
[f]="the \'%0\' unit is not supported with this instruction set",
[f]="the \'%0\' unit is not supported with this instruction set",
[g]=n,
[g]=n,
[b]="the \'(.*?)\' unit is not supported with this instruction set",
[h]="the \'(.*?)\' unit is not supported with this instruction set",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
Line 4,359: Line 5,242:
[f]="-mcmse is not supported for %0",
[f]="-mcmse is not supported for %0",
[g]=n,
[g]=n,
[b]="\\-mcmse is not supported for (.*?)",
[h]="\\-mcmse is not supported for (.*?)",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro"},
[c]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro"},
Line 4,371: Line 5,254:
[f]="hardware TLS register is not supported for the %0 sub-architecture",
[f]="hardware TLS register is not supported for the %0 sub-architecture",
[g]=n,
[g]=n,
[b]="hardware TLS register is not supported for the (.*?) sub\\-architecture",
[h]="hardware TLS register is not supported for the (.*?) sub\\-architecture",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[c]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[k]={{nb,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]={{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();"}}
},
},
["err_target_unsupported_type"]={
["err_target_unsupported_type"]={
Line 4,383: Line 5,266:
[f]="%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support, but target \'%5\' does not support it",
[f]="%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support, but target \'%5\' does not support it",
[g]=n,
[g]=n,
[b]="(.*?) requires (?:|(.*?) bit size) (.*?) (?:|return )type support, but target \'(.*?)\' does not support it",
[h]="(.*?) requires (?:|(.*?) bit size) (.*?) (?:|return )type support, but target \'(.*?)\' does not support it",
[h]=a,
[b]=a,
[j]="OpenMP Issue",
[j]="OpenMP Issue",
[c]={pb,1615397021,ub},
[c]={yb,1615397021,zb},
[k]={{hb,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);"},{hb,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);"},{hb,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);"},{hb,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);"},{v,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]={{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();"}},
[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"}
}
},
},
["err_target_unsupported_unaligned"]={
["err_target_unsupported_unaligned"]={
Line 4,395: Line 5,281:
[f]="the %0 sub-architecture does not support unaligned accesses",
[f]="the %0 sub-architecture does not support unaligned accesses",
[g]=n,
[g]=n,
[b]="the (.*?) sub\\-architecture does not support unaligned accesses",
[h]="the (.*?) sub\\-architecture does not support unaligned accesses",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets"},
[c]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets"},
[k]={{nb,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\";"},{nb,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]={{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\";"}}
},
},
["err_tcb_conflicting_attributes"]={
["err_tcb_conflicting_attributes"]={
Line 4,407: Line 5,293:
[f]="attributes \'%0(\"%2\")\' and \'%1(\"%2\")\' are mutually exclusive",
[f]="attributes \'%0(\"%2\")\' and \'%1(\"%2\")\' are mutually exclusive",
[g]=n,
[g]=n,
[b]="attributes \'(.*?)\\(\"(.*?)\"\\)\' and \'(.*?)\\(\"(.*?)\"\\)\' are mutually exclusive",
[h]="attributes \'(.*?)\\(\"(.*?)\"\\)\' and \'(.*?)\\(\"(.*?)\"\\)\' are mutually exclusive",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={W,1590001902,X},
[c]={bb,1590001902,ab},
[k]={{O,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;"},{O,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]={{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;"}},
[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"}
}
},
},
["err_temp_copy_ambiguous"]={
["err_temp_copy_ambiguous"]={
Line 4,419: Line 5,308:
[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",
[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]=n,
[g]=n,
[b]="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 (.*?)",
[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 (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[k]={{D,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]={{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);"}}
},
},
["err_temp_copy_deleted"]={
["err_temp_copy_deleted"]={
Line 4,431: Line 5,320:
[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",
[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]=n,
[g]=n,
[b]="(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_temp_copy_incomplete"]={
["err_temp_copy_incomplete"]={
Line 4,443: Line 5,335:
[f]="copying a temporary object of incomplete type %0",
[f]="copying a temporary object of incomplete type %0",
[g]=n,
[g]=n,
[b]="copying a temporary object of incomplete type (.*?)",
[h]="copying a temporary object of incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure"},
[c]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure"},
[k]={{D,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]={{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))"}}
},
},
["err_temp_copy_no_viable"]={
["err_temp_copy_no_viable"]={
Line 4,455: Line 5,347:
[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",
[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]=n,
[g]=n,
[b]="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 (.*?)",
[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 (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[k]={{D,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]={{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);"}},
[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\'"}
}
},
},
["err_template_arg_address_of_non_pointer"]={
["err_template_arg_address_of_non_pointer"]={
Line 4,467: Line 5,362:
[f]="address taken in non-type template argument for template parameter of reference type %0",
[f]="address taken in non-type template argument for template parameter of reference type %0",
[g]=n,
[g]=n,
[b]="address taken in non\\-type template argument for template parameter of reference type (.*?)",
[h]="address taken in non\\-type template argument for template parameter of reference type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[k]={{q,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;"},{q,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]={{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);"}},
[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)\'"}
}
},
},
["err_template_arg_deduced_incomplete_pack"]={
["err_template_arg_deduced_incomplete_pack"]={
Line 4,479: Line 5,377:
[f]="deduced incomplete pack %0 for template parameter %1",
[f]="deduced incomplete pack %0 for template parameter %1",
[g]=n,
[g]=n,
[b]="deduced incomplete pack (.*?) for template parameter (.*?)",
[h]="deduced incomplete pack (.*?) for template parameter (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context."},
[c]={"539e8e370398",1483494535,"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;"}}
Line 4,491: Line 5,389:
[f]="non-type template argument refers to non-static data member %0",
[f]="non-type template argument refers to non-static data member %0",
[g]=n,
[g]=n,
[b]="non\\-type template argument refers to non\\-static data member (.*?)",
[h]="non\\-type template argument refers to non\\-static data member (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}},
[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\'"}
}
},
},
["err_template_arg_invalid"]={
["err_template_arg_invalid"]={
Line 4,503: Line 5,404:
[f]="non-type template argument \'%0\' is invalid",
[f]="non-type template argument \'%0\' is invalid",
[g]=n,
[g]=n,
[b]="non\\-type template argument \'(.*?)\' is invalid",
[h]="non\\-type template argument \'(.*?)\' is invalid",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_template_arg_list_constraints_not_satisfied"]={
["err_template_arg_list_constraints_not_satisfied"]={
Line 4,515: Line 5,419:
[f]="constraints not satisfied for %select{class template|function template|variable template|alias template|template template parameter|template}0 %1%2",
[f]="constraints not satisfied for %select{class template|function template|variable template|alias template|template template parameter|template}0 %1%2",
[g]=n,
[g]=n,
[b]="constraints not satisfied for (?:class template|function template|variable template|alias template|template template parameter|template) (.*?)(.*?)",
[h]="constraints not satisfied for (?:class template|function template|variable template|alias template|template template parameter|template) (.*?)(.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[c]={"bd8791610948",1569403888,"[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]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:14:17: error: constraints not satisfied for class template \'is_same\' [with T = char, U = char]"}
}
},
},
["err_template_arg_list_different_arity"]={
["err_template_arg_list_different_arity"]={
Line 4,527: Line 5,434:
[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",
[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]=n,
[g]=n,
[b]="(?:too few|too many) template arguments for (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?)",
[h]="(?:too few|too many) template arguments for (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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;"},{q,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;"},{q,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]={{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());"}},
[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\'"}
}
},
},
["err_template_arg_member_ptr_base_derived_not_supported"]={
["err_template_arg_member_ptr_base_derived_not_supported"]={
Line 4,539: Line 5,449:
[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",
[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]=n,
[g]=n,
[b]="sorry, non\\-type template argument of pointer\\-to\\-member type (.*?) that refers to member (.*?) of a different class is not supported yet",
[h]="sorry, non\\-type template argument of pointer\\-to\\-member type (.*?) that refers to member (.*?) of a different class is not supported yet",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_method"]={
["err_template_arg_method"]={
Line 4,551: Line 5,464:
[f]="non-type template argument refers to non-static member function %0",
[f]="non-type template argument refers to non-static member function %0",
[g]=n,
[g]=n,
[b]="non\\-type template argument refers to non\\-static member function (.*?)",
[h]="non\\-type template argument refers to non\\-static member function (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}}
},
},
["err_template_arg_must_be_expr"]={
["err_template_arg_must_be_expr"]={
Line 4,563: Line 5,476:
[f]="template argument for non-type template parameter must be an expression",
[f]="template argument for non-type template parameter must be an expression",
[g]=n,
[g]=n,
[b]="template argument for non\\-type template parameter must be an expression",
[h]="template argument for non\\-type template parameter must be an expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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();"},{q,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]={{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;"}},
[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"}
}
},
},
["err_template_arg_must_be_template"]={
["err_template_arg_must_be_template"]={
Line 4,575: Line 5,491:
[f]="template argument for template template parameter must be a class template%select{| or type alias template}0",
[f]="template argument for template template parameter must be a class template%select{| or type alias template}0",
[g]=n,
[g]=n,
[b]="template argument for template template parameter must be a class template(?:| or type alias template)",
[h]="template argument for template template parameter must be a class template(?:| or type alias template)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_arg_must_be_type"]={
["err_template_arg_must_be_type"]={
Line 4,587: Line 5,506:
[f]="template argument for template type parameter must be a type",
[f]="template argument for template type parameter must be a type",
[g]=n,
[g]=n,
[b]="template argument for template type parameter must be a type",
[h]="template argument for template type parameter must be a type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_arg_must_be_type_suggest"]={
["err_template_arg_must_be_type_suggest"]={
Line 4,599: Line 5,521:
[f]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[f]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[g]=n,
[g]=n,
[b]="template argument for template type parameter must be a type; did you forget \'typename\'\\?",
[h]="template argument for template type parameter must be a type; did you forget \'typename\'\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler"},
[c]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler"},
[k]={{q,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]={{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 \");"}},
[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\'?"}
}
},
},
["err_template_arg_no_ref_bind"]={
["err_template_arg_no_ref_bind"]={
Line 4,611: Line 5,536:
[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",
[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]=n,
[g]=n,
[b]="non\\-type template parameter of reference type (?:(.*?) cannot bind to template argument of type (.*?)|cannot bind to template of incompatible argument type)",
[h]="non\\-type template parameter of reference type (?:(.*?) cannot bind to template argument of type (.*?)|cannot bind to template of incompatible argument type)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}},
[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\'"}
}
},
},
["err_template_arg_nontype_ambig"]={
["err_template_arg_nontype_ambig"]={
Line 4,623: Line 5,551:
[f]="template argument for non-type template parameter is treated as function type %0",
[f]="template argument for non-type template parameter is treated as function type %0",
[g]=n,
[g]=n,
[b]="template argument for non\\-type template parameter is treated as function type (.*?)",
[h]="template argument for non\\-type template parameter is treated as function type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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 ()\'"}
}
},
},
["err_template_arg_not_address_constant"]={
["err_template_arg_not_address_constant"]={
Line 4,635: Line 5,566:
[f]="non-type template argument of type %0 is not a constant expression",
[f]="non-type template argument of type %0 is not a constant expression",
[g]=n,
[g]=n,
[b]="non\\-type template argument of type (.*?) is not a constant expression",
[h]="non\\-type template argument of type (.*?) is not a constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_not_address_of"]={
["err_template_arg_not_address_of"]={
Line 4,647: Line 5,581:
[f]="non-type template argument for template parameter of pointer type %0 must have its address taken",
[f]="non-type template argument for template parameter of pointer type %0 must have its address taken",
[g]=n,
[g]=n,
[b]="non\\-type template argument for template parameter of pointer type (.*?) must have its address taken",
[h]="non\\-type template argument for template parameter of pointer type (.*?) must have its address taken",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[k]={{q,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;"},{q,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]={{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(), \"&\");"}},
[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"}
}
},
},
["err_template_arg_not_convertible"]={
["err_template_arg_not_convertible"]={
Line 4,659: Line 5,596:
[f]="non-type template argument of type %0 cannot be converted to a value of type %1",
[f]="non-type template argument of type %0 cannot be converted to a value of type %1",
[g]=n,
[g]=n,
[b]="non\\-type template argument of type (.*?) cannot be converted to a value of type (.*?)",
[h]="non\\-type template argument of type (.*?) cannot be converted to a value of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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();"},{q,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();"},{q,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();"},{q,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]={{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;"}},
[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\'"}
}
},
},
["err_template_arg_not_decl_ref"]={
["err_template_arg_not_decl_ref"]={
Line 4,671: Line 5,611:
[f]="non-type template argument does not refer to any declaration",
[f]="non-type template argument does not refer to any declaration",
[g]=n,
[g]=n,
[b]="non\\-type template argument does not refer to any declaration",
[h]="non\\-type template argument does not refer to any declaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template"},
[c]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template"},
[k]={{q,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();"},{q,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();"},{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_not_ice"]={
["err_template_arg_not_ice"]={
Line 4,683: Line 5,626:
[f]="non-type template argument of type %0 is not an integral constant expression",
[f]="non-type template argument of type %0 is not an integral constant expression",
[g]=n,
[g]=n,
[b]="non\\-type template argument of type (.*?) is not an integral constant expression",
[h]="non\\-type template argument of type (.*?) is not an integral constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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; }"}},
[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"}
}
},
},
["err_template_arg_not_integral_or_enumeral"]={
["err_template_arg_not_integral_or_enumeral"]={
Line 4,695: Line 5,641:
[f]="non-type template argument of type %0 must have an integral or enumeration type",
[f]="non-type template argument of type %0 must have an integral or enumeration type",
[g]=n,
[g]=n,
[b]="non\\-type template argument of type (.*?) must have an integral or enumeration type",
[h]="non\\-type template argument of type (.*?) must have an integral or enumeration type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_not_object_or_func"]={
["err_template_arg_not_object_or_func"]={
Line 4,707: Line 5,656:
[f]="non-type template argument does not refer to an object or function",
[f]="non-type template argument does not refer to an object or function",
[g]=n,
[g]=n,
[b]="non\\-type template argument does not refer to an object or function",
[h]="non\\-type template argument does not refer to an object or function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}}
},
},
["err_template_arg_not_pointer_to_member_form"]={
["err_template_arg_not_pointer_to_member_form"]={
Line 4,719: Line 5,668:
[f]="non-type template argument is not a pointer to member constant",
[f]="non-type template argument is not a pointer to member constant",
[g]=n,
[g]=n,
[b]="non\\-type template argument is not a pointer to member constant",
[h]="non\\-type template argument is not a pointer to member constant",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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();"},{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_not_valid_template"]={
["err_template_arg_not_valid_template"]={
Line 4,731: Line 5,683:
[f]="template argument does not refer to a class or alias template, or template template parameter",
[f]="template argument does not refer to a class or alias template, or template template parameter",
[g]=n,
[g]=n,
[b]="template argument does not refer to a class or alias template, or template template parameter",
[h]="template argument does not refer to a class or alias template, or template template parameter",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases."},
[c]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases."},
[k]={{q,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();"},{q,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]={{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);"}}
},
},
["err_template_arg_object_no_linkage"]={
["err_template_arg_object_no_linkage"]={
Line 4,743: Line 5,695:
[f]="non-type template argument refers to %select{function|object}0 %1 that does not have linkage",
[f]="non-type template argument refers to %select{function|object}0 %1 that does not have linkage",
[g]=n,
[g]=n,
[b]="non\\-type template argument refers to (?:function|object) (.*?) that does not have linkage",
[h]="non\\-type template argument refers to (?:function|object) (.*?) that does not have linkage",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_overload_type"]={
["err_template_arg_overload_type"]={
Line 4,755: Line 5,710:
[f]="template argument is the type of an unresolved overloaded function",
[f]="template argument is the type of an unresolved overloaded function",
[g]=n,
[g]=n,
[b]="template argument is the type of an unresolved overloaded function",
[h]="template argument is the type of an unresolved overloaded function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the"},
[c]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the"},
[k]={{q,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]={{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;"}}
},
},
["err_template_arg_ref_bind_ignores_quals"]={
["err_template_arg_ref_bind_ignores_quals"]={
Line 4,767: Line 5,722:
[f]="reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers",
[f]="reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers",
[g]=n,
[g]=n,
[b]="reference binding of non\\-type template parameter (?:of type (.*?) to template argument of type (.*?)|to template argument) ignores qualifiers",
[h]="reference binding of non\\-type template parameter (?:of type (.*?) to template argument of type (.*?)|to template argument) ignores qualifiers",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_reference_var"]={
["err_template_arg_reference_var"]={
Line 4,779: Line 5,737:
[f]="non-type template argument of reference type %0 is not an object",
[f]="non-type template argument of reference type %0 is not an object",
[g]=n,
[g]=n,
[b]="non\\-type template argument of reference type (.*?) is not an object",
[h]="non\\-type template argument of reference type (.*?) is not an object",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_template_params_mismatch"]={
["err_template_arg_template_params_mismatch"]={
Line 4,791: Line 5,752:
[f]="template template argument has different template parameters than its corresponding template template parameter",
[f]="template template argument has different template parameters than its corresponding template template parameter",
[g]=n,
[g]=n,
[b]="template template argument has different template parameters than its corresponding template template parameter",
[h]="template template argument has different template parameters than its corresponding template template parameter",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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);"},{q,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);"},{q,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);"},{q,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]={{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);"}},
[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"}
}
},
},
["err_template_arg_thread_local"]={
["err_template_arg_thread_local"]={
Line 4,803: Line 5,767:
[f]="non-type template argument refers to thread-local object",
[f]="non-type template argument refers to thread-local object",
[g]=n,
[g]=n,
[b]="non\\-type template argument refers to thread\\-local object",
[h]="non\\-type template argument refers to thread\\-local object",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_arg_untyped_null_constant"]={
["err_template_arg_untyped_null_constant"]={
Line 4,815: Line 5,782:
[f]="null non-type template argument must be cast to template parameter type %0",
[f]="null non-type template argument must be cast to template parameter type %0",
[g]=n,
[g]=n,
[b]="null non\\-type template argument must be cast to template parameter type (.*?)",
[h]="null non\\-type template argument must be cast to template parameter type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type"},
[c]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type"},
[k]={{q,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]={{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()), \")\");"}},
[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\'"}
}
},
},
["err_template_arg_wrongtype_null_constant"]={
["err_template_arg_wrongtype_null_constant"]={
Line 4,827: Line 5,797:
[f]="null non-type template argument of type %0 does not match template parameter of type %1",
[f]="null non-type template argument of type %0 does not match template parameter of type %1",
[g]=n,
[g]=n,
[b]="null non\\-type template argument of type (.*?) does not match template parameter of type (.*?)",
[h]="null non\\-type template argument of type (.*?) does not match template parameter of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[k]={{q,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]={{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();"}},
[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 *\'"}
}
},
},
["err_template_defn_explicit_instantiation"]={
["err_template_defn_explicit_instantiation"]={
Line 4,839: Line 5,812:
[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",
[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]=n,
[g]=n,
[b]="(?: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",
[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",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"},
[c]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"},
[k]={{R,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);"},{bb,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);"},{rb,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]={{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;"}},
[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"}
}
},
},
["err_template_different_requires_clause"]={
["err_template_different_requires_clause"]={
Line 4,851: Line 5,827:
[f]="requires clause differs in template redeclaration",
[f]="requires clause differs in template redeclaration",
[g]=n,
[g]=n,
[b]="requires clause differs in template redeclaration",
[h]="requires clause differs in template redeclaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_template_different_type_constraint"]={
["err_template_different_type_constraint"]={
Line 4,863: Line 5,842:
[f]="type constraint differs in template redeclaration",
[f]="type constraint differs in template redeclaration",
[g]=n,
[g]=n,
[b]="type constraint differs in template redeclaration",
[h]="type constraint differs in template redeclaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={kb,1576172311,lb},
[c]={sb,1576172311,tb},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_template_expansion_into_fixed_list"]={
["err_template_expansion_into_fixed_list"]={
Line 4,875: Line 5,857:
[f]="pack expansion used as argument for non-pack parameter of %select{alias template|concept}0",
[f]="pack expansion used as argument for non-pack parameter of %select{alias template|concept}0",
[g]=n,
[g]=n,
[b]="pack expansion used as argument for non\\-pack parameter of (?:alias template|concept)",
[h]="pack expansion used as argument for non\\-pack parameter of (?:alias template|concept)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_id_not_a_type"]={
["err_template_id_not_a_type"]={
Line 4,887: Line 5,872:
[f]="template name refers to non-type template %0",
[f]="template name refers to non-type template %0",
[g]=n,
[g]=n,
[b]="template name refers to non\\-type template (.*?)",
[h]="template name refers to non\\-type template (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[k]={{q,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]={{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;"}},
[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\'"}
}
},
},
["err_template_inside_local_class"]={
["err_template_inside_local_class"]={
Line 4,899: Line 5,887:
[f]="templates cannot be declared inside of a local class",
[f]="templates cannot be declared inside of a local class",
[g]=n,
[g]=n,
[b]="templates cannot be declared inside of a local class",
[h]="templates cannot be declared inside of a local class",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes"},
[c]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes"},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_instantiate_undefined"]={
["err_template_instantiate_undefined"]={
Line 4,911: Line 5,902:
[f]="%select{implicit|explicit}0 instantiation of undefined template %1",
[f]="%select{implicit|explicit}0 instantiation of undefined template %1",
[g]=n,
[g]=n,
[b]="(?:implicit|explicit) instantiation of undefined template (.*?)",
[h]="(?:implicit|explicit) instantiation of undefined template (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We"},
[c]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We"},
[k]={{q,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]={{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;"}},
[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>\'"}
}
},
},
["err_template_instantiate_within_definition"]={
["err_template_instantiate_within_definition"]={
Line 4,923: Line 5,917:
[f]="%select{implicit|explicit}0 instantiation of template %1 within its own definition",
[f]="%select{implicit|explicit}0 instantiation of template %1 within its own definition",
[g]=n,
[g]=n,
[b]="(?:implicit|explicit) instantiation of template (.*?) within its own definition",
[h]="(?:implicit|explicit) instantiation of template (.*?) within its own definition",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is"},
[c]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is"},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_kernel"]={
["err_template_kernel"]={
Line 4,935: Line 5,932:
[f]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[f]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[g]=n,
[g]=n,
[b]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[h]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."},
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."},
[k]={{t,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]={
["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:14:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization","clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:18:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization"}
}
},
},
["err_template_kw_missing"]={
["err_template_kw_missing"]={
Line 4,947: Line 5,947:
[f]="missing \'template\' keyword prior to dependent template name \'%0%1\'",
[f]="missing \'template\' keyword prior to dependent template name \'%0%1\'",
[g]=n,
[g]=n,
[b]="missing \'template\' keyword prior to dependent template name \'(.*?)(.*?)\'",
[h]="missing \'template\' keyword prior to dependent template name \'(.*?)(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"},
[c]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"},
[k]={{p,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() << \"\";"},{q,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 \");"},{q,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]={{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);"}},
[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\'"}
}
},
},
["err_template_kw_refers_to_dependent_non_template"]={
["err_template_kw_refers_to_dependent_non_template"]={
Line 4,959: Line 5,962:
[f]="%0%select{| following the \'template\' keyword}1 cannot refer to a dependent template",
[f]="%0%select{| following the \'template\' keyword}1 cannot refer to a dependent template",
[g]=n,
[g]=n,
[b]="(.*?)(?:| following the \'template\' keyword) cannot refer to a dependent template",
[h]="(.*?)(?:| following the \'template\' keyword) cannot refer to a dependent template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_kw_refers_to_non_template"]={
["err_template_kw_refers_to_non_template"]={
Line 4,971: Line 5,977:
[f]="%0%select{| following the \'template\' keyword}1 does not refer to a template",
[f]="%0%select{| following the \'template\' keyword}1 does not refer to a template",
[g]=n,
[g]=n,
[b]="(.*?)(?:| following the \'template\' keyword) does not refer to a template",
[h]="(.*?)(?:| following the \'template\' keyword) does not refer to a template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur"},
[c]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur"},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_kw_refers_to_type_template"]={
["err_template_kw_refers_to_type_template"]={
Line 4,983: Line 5,992:
[f]="\'%0%1\' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template",
[f]="\'%0%1\' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template",
[g]=n,
[g]=n,
[b]="\'(.*?)(.*?)\' is expected to be a non\\-type template, but instantiated to a (?:class|type alias) template",
[h]="\'(.*?)(.*?)\' is expected to be a non\\-type template, but instantiated to a (?:class|type alias) template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_linkage"]={
["err_template_linkage"]={
Line 4,995: Line 6,007:
[f]="templates must have C++ linkage",
[f]="templates must have C++ linkage",
[g]=n,
[g]=n,
[b]="templates must have C\\+\\+ linkage",
[h]="templates must have C\\+\\+ linkage",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_member"]={
["err_template_member"]={
Line 5,007: Line 6,022:
[f]="member %0 declared as a template",
[f]="member %0 declared as a template",
[g]=n,
[g]=n,
[b]="member (.*?) declared as a template",
[h]="member (.*?) declared as a template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[k]={{y,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]={{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());"}},
[o]={
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"}
}
},
},
["err_template_member_noparams"]={
["err_template_member_noparams"]={
Line 5,019: Line 6,037:
[f]="extraneous \'template<>\' in declaration of member %0",
[f]="extraneous \'template<>\' in declaration of member %0",
[g]=n,
[g]=n,
[b]="extraneous \'template\\<\\>\' in declaration of member (.*?)",
[h]="extraneous \'template\\<\\>\' in declaration of member (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[k]={{y,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]={{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());"}},
[o]={
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"}
}
},
},
["err_template_missing_args"]={
["err_template_missing_args"]={
Line 5,031: Line 6,052:
[f]="use of %select{class template|function template|variable template|alias template|template template parameter|concept|template}0 %1 requires template arguments",
[f]="use of %select{class template|function template|variable template|alias template|template template parameter|concept|template}0 %1 requires template arguments",
[g]=n,
[g]=n,
[b]="use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments",
[h]="use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type"},
[c]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type"},
[k]={{q,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}}
[k]={{r,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}},
[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"}
}
},
},
["err_template_nontype_parm_bad_structural_type"]={
["err_template_nontype_parm_bad_structural_type"]={
Line 5,043: Line 6,067:
[f]="a non-type template parameter cannot have type %0 before C++20",
[f]="a non-type template parameter cannot have type %0 before C++20",
[g]=n,
[g]=n,
[b]="a non\\-type template parameter cannot have type (.*?) before C\\+\\+20",
[h]="a non\\-type template parameter cannot have type (.*?) before C\\+\\+20",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_nontype_parm_bad_type"]={
["err_template_nontype_parm_bad_type"]={
Line 5,055: Line 6,082:
[f]="a non-type template parameter cannot have type %0",
[f]="a non-type template parameter cannot have type %0",
[g]=n,
[g]=n,
[b]="a non\\-type template parameter cannot have type (.*?)",
[h]="a non\\-type template parameter cannot have type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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)\'"}
}
},
},
["err_template_nontype_parm_different_type"]={
["err_template_nontype_parm_different_type"]={
Line 5,067: Line 6,097:
[f]="template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration",
[f]="template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration",
[g]=n,
[g]=n,
[b]="template non\\-type parameter has a different type (.*?) in template (?:|template parameter )redeclaration",
[h]="template non\\-type parameter has a different type (.*?) in template (?:|template parameter )redeclaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_nontype_parm_incomplete"]={
["err_template_nontype_parm_incomplete"]={
Line 5,079: Line 6,112:
[f]="non-type template parameter has incomplete type %0",
[f]="non-type template parameter has incomplete type %0",
[g]=n,
[g]=n,
[b]="non\\-type template parameter has incomplete type (.*?)",
[h]="non\\-type template parameter has incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{q,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]={{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))"}},
[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\'"}
}
},
},
["err_template_nontype_parm_not_literal"]={
["err_template_nontype_parm_not_literal"]={
Line 5,091: Line 6,127:
[f]="non-type template parameter has non-literal type %0",
[f]="non-type template parameter has non-literal type %0",
[g]=n,
[g]=n,
[b]="non\\-type template parameter has non\\-literal type (.*?)",
[h]="non\\-type template parameter has non\\-literal type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{q,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]={{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))"}}
},
},
["err_template_nontype_parm_not_structural"]={
["err_template_nontype_parm_not_structural"]={
Line 5,103: Line 6,139:
[f]="type %0 of non-type template parameter is not a structural type",
[f]="type %0 of non-type template parameter is not a structural type",
[g]=n,
[g]=n,
[b]="type (.*?) of non\\-type template parameter is not a structural type",
[h]="type (.*?) of non\\-type template parameter is not a structural type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_nontype_parm_rvalue_ref"]={
["err_template_nontype_parm_rvalue_ref"]={
Line 5,115: Line 6,154:
[f]="non-type template parameter has rvalue reference type %0",
[f]="non-type template parameter has rvalue reference type %0",
[g]=n,
[g]=n,
[b]="non\\-type template parameter has rvalue reference type (.*?)",
[h]="non\\-type template parameter has rvalue reference type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{q,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]={{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;"}},
[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 &&\'"}
}
},
},
["err_template_outside_namespace_or_class_scope"]={
["err_template_outside_namespace_or_class_scope"]={
Line 5,127: Line 6,169:
[f]="templates can only be declared in namespace or class scope",
[f]="templates can only be declared in namespace or class scope",
[g]=n,
[g]=n,
[b]="templates can only be declared in namespace or class scope",
[h]="templates can only be declared in namespace or class scope",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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();"}},
[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"}
}
},
},
["err_template_param_default_arg_inconsistent_redefinition"]={
["err_template_param_default_arg_inconsistent_redefinition"]={
Line 5,139: Line 6,184:
[f]="template parameter default argument is inconsistent with previous definition",
[f]="template parameter default argument is inconsistent with previous definition",
[g]=n,
[g]=n,
[b]="template parameter default argument is inconsistent with previous definition",
[h]="template parameter default argument is inconsistent with previous definition",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{q,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]={{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);"}}
},
},
["err_template_param_default_arg_missing"]={
["err_template_param_default_arg_missing"]={
Line 5,151: Line 6,196:
[f]="template parameter missing a default argument",
[f]="template parameter missing a default argument",
[g]=n,
[g]=n,
[b]="template parameter missing a default argument",
[h]="template parameter missing a default argument",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_template_param_default_arg_redefinition"]={
["err_template_param_default_arg_redefinition"]={
Line 5,163: Line 6,211:
[f]="template parameter redefines default argument",
[f]="template parameter redefines default argument",
[g]=n,
[g]=n,
[b]="template parameter redefines default argument",
[h]="template parameter redefines default argument",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_template_param_different_kind"]={
["err_template_param_different_kind"]={
Line 5,175: Line 6,226:
[f]="template parameter has a different kind in template %select{|template parameter }0redeclaration",
[f]="template parameter has a different kind in template %select{|template parameter }0redeclaration",
[g]=n,
[g]=n,
[b]="template parameter has a different kind in template (?:|template parameter )redeclaration",
[h]="template parameter has a different kind in template (?:|template parameter )redeclaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_param_list_different_arity"]={
["err_template_param_list_different_arity"]={
Line 5,187: Line 6,241:
[f]="%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration",
[f]="%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration",
[g]=n,
[g]=n,
[b]="(?:too few|too many) template parameters in template (?:|template parameter )redeclaration",
[h]="(?:too few|too many) template parameters in template (?:|template parameter )redeclaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_param_list_matches_nontemplate"]={
["err_template_param_list_matches_nontemplate"]={
Line 5,199: Line 6,256:
[f]="template parameter list matching the non-templated nested type %0 should be empty (\'template<>\')",
[f]="template parameter list matching the non-templated nested type %0 should be empty (\'template<>\')",
[g]=n,
[g]=n,
[b]="template parameter list matching the non\\-templated nested type (.*?) should be empty \\(\'template\\<\\>\'\\)",
[h]="template parameter list matching the non\\-templated nested type (.*?) should be empty \\(\'template\\<\\>\'\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template"},
[c]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template"},
[k]={{q,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]={{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);"}},
[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<>\')"}
}
},
},
["err_template_param_pack_default_arg"]={
["err_template_param_pack_default_arg"]={
Line 5,211: Line 6,271:
[f]="template parameter pack cannot have a default argument",
[f]="template parameter pack cannot have a default argument",
[g]=n,
[g]=n,
[b]="template parameter pack cannot have a default argument",
[h]="template parameter pack cannot have a default argument",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."},
[c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."},
[k]={{q,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);"},{q,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);"},{q,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]={{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);"}},
[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"}
}
},
},
["err_template_param_pack_must_be_last_template_parameter"]={
["err_template_param_pack_must_be_last_template_parameter"]={
Line 5,223: Line 6,286:
[f]="template parameter pack must be the last template parameter",
[f]="template parameter pack must be the last template parameter",
[g]=n,
[g]=n,
[b]="template parameter pack must be the last template parameter",
[h]="template parameter pack must be the last template parameter",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"327865db5323",1244848815,"A parameter pack must always come last in a class template."},
[c]={"327865db5323",1244848815,"A parameter pack must always come last in a class template."},
[k]={{q,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);"},{q,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]={{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);"}},
[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"}
}
},
},
["err_template_param_shadow"]={
["err_template_param_shadow"]={
Line 5,235: Line 6,301:
[f]="declaration of %0 shadows template parameter",
[f]="declaration of %0 shadows template parameter",
[g]=n,
[g]=n,
[b]="declaration of (.*?) shadows template parameter",
[h]="declaration of (.*?) shadows template parameter",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{yb,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;"},{q,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]={{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;"}},
[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"}
}
},
},
["err_template_parameter_default_friend_template"]={
["err_template_parameter_default_friend_template"]={
Line 5,247: Line 6,316:
[f]="default template argument not permitted on a friend template",
[f]="default template argument not permitted on a friend template",
[g]=n,
[g]=n,
[b]="default template argument not permitted on a friend template",
[h]="default template argument not permitted on a friend template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_parameter_default_template_member"]={
["err_template_parameter_default_template_member"]={
Line 5,259: Line 6,331:
[f]="cannot add a default template argument to the definition of a member of a class template",
[f]="cannot add a default template argument to the definition of a member of a class template",
[g]=n,
[g]=n,
[b]="cannot add a default template argument to the definition of a member of a class template",
[h]="cannot add a default template argument to the definition of a member of a class template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_parameter_pack_non_pack"]={
["err_template_parameter_pack_non_pack"]={
Line 5,271: Line 6,346:
[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",
[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]=n,
[g]=n,
[b]="(?:template type|non\\-type template|template template) parameter(?:| pack) conflicts with previous (?:template type|non\\-type template|template template) parameter(?: pack|)",
[h]="(?:template type|non\\-type template|template template) parameter(?:| pack) conflicts with previous (?:template type|non\\-type template|template template) parameter(?: pack|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[c]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_qualified_declarator_no_match"]={
["err_template_qualified_declarator_no_match"]={
Line 5,283: Line 6,361:
[f]="nested name specifier \'%0\' for declaration does not refer into a class, class template or class template partial specialization",
[f]="nested name specifier \'%0\' for declaration does not refer into a class, class template or class template partial specialization",
[g]=n,
[g]=n,
[b]="nested name specifier \'(.*?)\' for declaration does not refer into a class, class template or class template partial specialization",
[h]="nested name specifier \'(.*?)\' for declaration does not refer into a class, class template or class template partial specialization",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but"},
[c]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but"},
[k]={{t,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();"},{q,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();"},{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();"}},
[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"}
}
},
},
["err_template_recursion_depth_exceeded"]={
["err_template_recursion_depth_exceeded"]={
Line 5,295: Line 6,376:
[f]="recursive template instantiation exceeded maximum depth of %0",
[f]="recursive template instantiation exceeded maximum depth of %0",
[g]="fatal error\\: ",
[g]="fatal error\\: ",
[b]="recursive template instantiation exceeded maximum depth of (.*?)",
[h]="recursive template instantiation exceeded maximum depth of (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[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]={
["clang/test/SemaTemplate/instantiation-depth-subst.cpp"]={"clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: fatal error: recursive template instantiation exceeded maximum depth of 2"}
}
},
},
["err_template_spec_decl_friend"]={
["err_template_spec_decl_friend"]={
Line 5,307: Line 6,391:
[f]="cannot declare an explicit specialization in a friend",
[f]="cannot declare an explicit specialization in a friend",
[g]=n,
[g]=n,
[b]="cannot declare an explicit specialization in a friend",
[h]="cannot declare an explicit specialization in a friend",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"816d75b7012a",1269416766,"Support friend function specializations."},
[c]={"816d75b7012a",1269416766,"Support friend function specializations."},
[k]={{t,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]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:9:26: error: cannot declare an explicit specialization in a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:18:27: error: cannot declare an explicit specialization in a friend"}
}
},
},
["err_template_spec_decl_function_scope"]={
["err_template_spec_decl_function_scope"]={
Line 5,319: Line 6,406:
[f]="explicit specialization of %0 in function scope",
[f]="explicit specialization of %0 in function scope",
[g]=n,
[g]=n,
[b]="explicit specialization of (.*?) in function scope",
[h]="explicit specialization of (.*?) in function scope",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}}
},
},
["err_template_spec_default_arg"]={
["err_template_spec_default_arg"]={
Line 5,331: Line 6,418:
[f]="default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1",
[f]="default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1",
[g]=n,
[g]=n,
[b]="default argument not permitted on an explicit (?:instantiation|specialization) of function (.*?)",
[h]="default argument not permitted on an explicit (?:instantiation|specialization) of function (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a"},
[c]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a"},
[k]={{y,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]={{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();"}},
[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\'"}
}
},
},
["err_template_spec_extra_headers"]={
["err_template_spec_extra_headers"]={
Line 5,343: Line 6,433:
[f]="extraneous template parameter list in template specialization or out-of-line template definition",
[f]="extraneous template parameter list in template specialization or out-of-line template definition",
[g]=n,
[g]=n,
[b]="extraneous template parameter list in template specialization or out\\-of\\-line template definition",
[h]="extraneous template parameter list in template specialization or out\\-of\\-line template definition",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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());"}},
[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"}
}
},
},
["err_template_spec_friend"]={
["err_template_spec_friend"]={
Line 5,355: Line 6,448:
[f]="template specialization declaration cannot be a friend",
[f]="template specialization declaration cannot be a friend",
[g]=n,
[g]=n,
[b]="template specialization declaration cannot be a friend",
[h]="template specialization declaration cannot be a friend",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend"},
[c]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend"},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_template_spec_needs_header"]={
["err_template_spec_needs_header"]={
Line 5,367: Line 6,463:
[f]="template specialization requires \'template<>\'",
[f]="template specialization requires \'template<>\'",
[g]=n,
[g]=n,
[b]="template specialization requires \'template\\<\\>\'",
[h]="template specialization requires \'template\\<\\>\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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<> \");"}},
[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<>\'"}
}
},
},
["err_template_spec_needs_template_parameters"]={
["err_template_spec_needs_template_parameters"]={
Line 5,379: Line 6,478:
[f]="template specialization or definition requires a template parameter list corresponding to the nested type %0",
[f]="template specialization or definition requires a template parameter list corresponding to the nested type %0",
[g]=n,
[g]=n,
[b]="template specialization or definition requires a template parameter list corresponding to the nested type (.*?)",
[h]="template specialization or definition requires a template parameter list corresponding to the nested type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the"},
[c]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the"},
[k]={{q,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]={{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);"}},
[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>\'"}
}
},
},
["err_template_spec_redecl_global_scope"]={
["err_template_spec_redecl_global_scope"]={
Line 5,391: Line 6,493:
[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",
[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]=n,
[g]=n,
[b]="(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_spec_redecl_out_of_scope"]={
["err_template_spec_redecl_out_of_scope"]={
Line 5,403: Line 6,508:
[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",
[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]=n,
[g]=n,
[b]="(?: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)",
[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)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_template_spec_syntax_non_template"]={
["err_template_spec_syntax_non_template"]={
Line 5,415: Line 6,523:
[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",
[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]=n,
[g]=n,
[b]="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)",
[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)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{bb,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]={{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;"}},
[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"}
}
},
},
["err_template_spec_unknown_kind"]={
["err_template_spec_unknown_kind"]={
Line 5,427: Line 6,538:
[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",
[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]=n,
[g]=n,
[b]="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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[c]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[k]={{q,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]={{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;"}}
},
},
["err_template_tag_noparams"]={
["err_template_tag_noparams"]={
Line 5,439: Line 6,550:
[f]="extraneous \'template<>\' in declaration of %0 %1",
[f]="extraneous \'template<>\' in declaration of %0 %1",
[g]=n,
[g]=n,
[b]="extraneous \'template\\<\\>\' in declaration of (.*?) (.*?)",
[h]="extraneous \'template\\<\\>\' in declaration of (.*?) (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class"},
[c]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class"},
[k]={{t,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;"},{y,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;"},{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;"}},
[o]={
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"}
}
},
},
["err_template_template_parameter_not_at_least_as_constrained"]={
["err_template_template_parameter_not_at_least_as_constrained"]={
Line 5,451: Line 6,565:
[f]="template template argument %0 is more constrained than template template parameter %1",
[f]="template template argument %0 is more constrained than template template parameter %1",
[g]=n,
[g]=n,
[b]="template template argument (.*?) is more constrained than template template parameter (.*?)",
[h]="template template argument (.*?) is more constrained than template template parameter (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={kb,1576172311,lb},
[c]={sb,1576172311,tb},
[k]={{q,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]={{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();"}},
[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\'"}
}
},
},
["err_template_template_parm_no_parms"]={
["err_template_template_parm_no_parms"]={
Line 5,463: Line 6,580:
[f]="template template parameter must have its own template parameters",
[f]="template template parameter must have its own template parameters",
[g]=n,
[g]=n,
[b]="template template parameter must have its own template parameters",
[h]="template template parameter must have its own template parameters",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"},
[c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"},
[k]={{q,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]={{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());"}},
[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"}
}
},
},
["err_template_typedef"]={
["err_template_typedef"]={
Line 5,475: Line 6,595:
[f]="a typedef cannot be a template",
[f]="a typedef cannot be a template",
[g]=n,
[g]=n,
[b]="a typedef cannot be a template",
[h]="a typedef cannot be a template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to"},
[c]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to"},
[k]={{t,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]={
["clang/test/SemaTemplate/template-decl-fail.cpp"]={"clang/test/SemaTemplate/template-decl-fail.cpp:3:32: error: a typedef cannot be a template"}
}
},
},
["err_template_unnamed_class"]={
["err_template_unnamed_class"]={
Line 5,487: Line 6,610:
[f]="cannot declare a class template with no name",
[f]="cannot declare a class template with no name",
[g]=n,
[g]=n,
[b]="cannot declare a class template with no name",
[h]="cannot declare a class template with no name",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{q,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]={{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);"}}
},
},
["err_template_variable_noparams"]={
["err_template_variable_noparams"]={
Line 5,499: Line 6,622:
[f]="extraneous \'template<>\' in declaration of variable %0",
[f]="extraneous \'template<>\' in declaration of variable %0",
[g]=n,
[g]=n,
[b]="extraneous \'template\\<\\>\' in declaration of variable (.*?)",
[h]="extraneous \'template\\<\\>\' in declaration of variable (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static"},
[c]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static"},
[k]={{t,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]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:32:3: error: extraneous \'template<>\' in declaration of variable \'foo\'"}
}
},
},
["err_templated_invalid_declaration"]={
["err_templated_invalid_declaration"]={
Line 5,511: Line 6,637:
[f]="a static_assert declaration cannot be a template",
[f]="a static_assert declaration cannot be a template",
[g]=n,
[g]=n,
[b]="a static_assert declaration cannot be a template",
[h]="a static_assert declaration cannot be a template",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently..."},
[c]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently..."},
[k]={{rb,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]={{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();"}},
[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"}
}
},
},
["err_templated_using_directive_declaration"]={
["err_templated_using_directive_declaration"]={
Line 5,523: Line 6,652:
[f]="cannot template a using %select{directive|declaration}0",
[f]="cannot template a using %select{directive|declaration}0",
[g]=n,
[g]=n,
[b]="cannot template a using (?:directive|declaration)",
[h]="cannot template a using (?:directive|declaration)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[k]={{bb,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);"},{bb,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);"},{bb,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]={{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);"}},
[o]={
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"}
}
},
},
["err_tentative_def_incomplete_type"]={
["err_tentative_def_incomplete_type"]={
Line 5,535: Line 6,667:
[f]="tentative definition has type %0 that is never completed",
[f]="tentative definition has type %0 that is never completed",
[g]=n,
[g]=n,
[b]="tentative definition has type (.*?) that is never completed",
[h]="tentative definition has type (.*?) that is never completed",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{hb,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]={{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))"}},
[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"}
}
},
},
["err_test_module_file_extension_format"]={
["err_test_module_file_extension_format"]={
Line 5,547: Line 6,682:
[f]="-ftest-module-file-extension argument \'%0\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[f]="-ftest-module-file-extension argument \'%0\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[g]=n,
[g]=n,
[b]="\\-ftest\\-module\\-file\\-extension argument \'(.*?)\' is not of the required form \'blockname\\:major\\:minor\\:hashed\\:user info\'",
[h]="\\-ftest\\-module\\-file\\-extension argument \'(.*?)\' is not of the required form \'blockname\\:major\\:minor\\:hashed\\:user info\'",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
Line 5,559: Line 6,694:
[f]="test module file extension \'%0\' has different version (%1.%2) than expected (%3.%4)",
[f]="test module file extension \'%0\' has different version (%1.%2) than expected (%3.%4)",
[g]=n,
[g]=n,
[b]="test module file extension \'(.*?)\' has different version \\((.*?)\\.(.*?)\\) than expected \\((.*?)\\.(.*?)\\)",
[h]="test module file extension \'(.*?)\' has different version \\((.*?)\\.(.*?)\\) than expected \\((.*?)\\.(.*?)\\)",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[c]={"6623e1f10f95",1446575587,"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]={
["clang/test/Modules/extensions.c"]={"clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testA\' has different version (2.5) than expected (1.3)","clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testB\' has different version (7.3) than expected (3.2)"}
}
},
},
["err_this_capture"]={
["err_this_capture"]={
Line 5,571: Line 6,709:
[f]="\'this\' cannot be %select{implicitly |}0captured in this context",
[f]="\'this\' cannot be %select{implicitly |}0captured in this context",
[g]=n,
[g]=n,
[b]="\'this\' cannot be (?:implicitly |)captured in this context",
[h]="\'this\' cannot be (?:implicitly |)captured in this context",
[h]=a,
[b]=a,
[j]="Lambda Issue",
[j]="Lambda Issue",
[c]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which"},
[c]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which"},
[k]={{E,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);"},{E,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);"},{yb,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]={{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;"}},
[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"}
}
},
},
["err_this_captured_by_reference"]={
["err_this_captured_by_reference"]={
Line 5,583: Line 6,724:
[f]="\'this\' cannot be captured by reference",
[f]="\'this\' cannot be captured by reference",
[g]=n,
[g]=n,
[b]="\'this\' cannot be captured by reference",
[h]="\'this\' cannot be captured by reference",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from"},
[c]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from"},
[k]={{cb,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]={{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);"}},
[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"}
}
},
},
["err_this_static_member_func"]={
["err_this_static_member_func"]={
Line 5,595: Line 6,739:
[f]="\'this\' cannot be%select{| implicitly}0 used in a static member function declaration",
[f]="\'this\' cannot be%select{| implicitly}0 used in a static member function declaration",
[g]=n,
[g]=n,
[b]="\'this\' cannot be(?:| implicitly) used in a static member function declaration",
[h]="\'this\' cannot be(?:| implicitly) used in a static member function declaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"},
[c]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"},
[k]={{y,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]={{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();"}},
[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"}
}
},
},
["err_thread_dynamic_init"]={
["err_thread_dynamic_init"]={
Line 5,607: Line 6,754:
[f]="initializer for thread-local variable must be a constant expression",
[f]="initializer for thread-local variable must be a constant expression",
[g]=n,
[g]=n,
[b]="initializer for thread\\-local variable must be a constant expression",
[h]="initializer for thread\\-local variable must be a constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[k]={{t,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]={
["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:12:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:19:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:26:28: error: initializer for thread-local variable must be a constant expression"}
}
},
},
["err_thread_non_global"]={
["err_thread_non_global"]={
Line 5,619: Line 6,769:
[f]="\'%0\' variables must have global storage",
[f]="\'%0\' variables must have global storage",
[g]=n,
[g]=n,
[b]="\'(.*?)\' variables must have global storage",
[h]="\'(.*?)\' variables must have global storage",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[k]={{t,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);"},{O,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);"},{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)\";"}},
[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"}
}
},
},
["err_thread_non_thread"]={
["err_thread_non_thread"]={
Line 5,631: Line 6,784:
[f]="thread-local declaration of %0 follows non-thread-local declaration",
[f]="thread-local declaration of %0 follows non-thread-local declaration",
[g]=n,
[g]=n,
[b]="thread\\-local declaration of (.*?) follows non\\-thread\\-local declaration",
[h]="thread\\-local declaration of (.*?) follows non\\-thread\\-local declaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[k]={{t,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]={
["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:11:21: error: thread-local declaration of \'b\' follows non-thread-local declaration"}
}
},
},
["err_thread_nontrivial_dtor"]={
["err_thread_nontrivial_dtor"]={
Line 5,643: Line 6,799:
[f]="type of thread-local variable has non-trivial destruction",
[f]="type of thread-local variable has non-trivial destruction",
[g]=n,
[g]=n,
[b]="type of thread\\-local variable has non\\-trivial destruction",
[h]="type of thread\\-local variable has non\\-trivial destruction",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[k]={{t,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]={
["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:109:12: error: type of thread-local variable has non-trivial destruction"}
}
},
},
["err_thread_thread_different_kind"]={
["err_thread_thread_different_kind"]={
Line 5,655: Line 6,814:
[f]="thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization",
[f]="thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization",
[g]=n,
[g]=n,
[b]="thread\\-local declaration of (.*?) with (?:static|dynamic) initialization follows declaration with (?:dynamic|static) initialization",
[h]="thread\\-local declaration of (.*?) with (?:static|dynamic) initialization follows declaration with (?:dynamic|static) initialization",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."},
[c]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."},
[k]={{t,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]={
["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:74:19: error: thread-local declaration of \'t17\' with static initialization follows declaration with dynamic initialization","clang/test/Sema/thread-specifier.c:78:18: error: thread-local declaration of \'t18\' with dynamic initialization follows declaration with static initialization"}
}
},
},
["err_thread_unsupported"]={
["err_thread_unsupported"]={
Line 5,667: Line 6,829:
[f]="thread-local storage is not supported for the current target",
[f]="thread-local storage is not supported for the current target",
[g]=n,
[g]=n,
[b]="thread\\-local storage is not supported for the current target",
[h]="thread\\-local storage is not supported for the current target",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it."},
[c]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it."},
[k]={{t,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);"},{t,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);"},{t,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);"},{O,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);"},{p,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);"},{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);"}},
[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"}
}
},
},
["err_three_way_vector_comparison"]={
["err_three_way_vector_comparison"]={
Line 5,679: Line 6,844:
[f]="three-way comparison between vectors is not supported",
[f]="three-way comparison between vectors is not supported",
[g]=n,
[g]=n,
[b]="three\\-way comparison between vectors is not supported",
[h]="three\\-way comparison between vectors is not supported",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{p,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);"},{p,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]={{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);"}},
[o]={
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:419:15: error: three-way comparison between vectors is not supported"}
}
},
},
["err_throw_abstract_type"]={
["err_throw_abstract_type"]={
Line 5,691: Line 6,859:
[f]="cannot throw an object of abstract type %0",
[f]="cannot throw an object of abstract type %0",
[g]=n,
[g]=n,
[b]="cannot throw an object of abstract type (.*?)",
[h]="cannot throw an object of abstract type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."},
[c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."},
[k]={{E,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]={{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))"}},
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"}
}
},
},
["err_throw_incomplete"]={
["err_throw_incomplete"]={
Line 5,703: Line 6,874:
[f]="cannot throw object of incomplete type %0",
[f]="cannot throw object of incomplete type %0",
[g]=n,
[g]=n,
[b]="cannot throw object of incomplete type (.*?)",
[h]="cannot throw object of incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[k]={{E,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]={{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()))"}},
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"}
}
},
},
["err_throw_incomplete_ptr"]={
["err_throw_incomplete_ptr"]={
Line 5,715: Line 6,889:
[f]="cannot throw pointer to object of incomplete type %0",
[f]="cannot throw pointer to object of incomplete type %0",
[g]=n,
[g]=n,
[b]="cannot throw pointer to object of incomplete type (.*?)",
[h]="cannot throw pointer to object of incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[k]={{E,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]={{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()))"}},
[o]={
[Jb]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"}
}
},
},
["err_throw_sizeless"]={
["err_throw_sizeless"]={
Line 5,727: Line 6,904:
[f]="cannot throw object of sizeless type %0",
[f]="cannot throw object of sizeless type %0",
[g]=n,
[g]=n,
[b]="cannot throw object of sizeless type (.*?)",
[h]="cannot throw object of sizeless type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{E,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]={{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();"}},
[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\')"}
}
},
},
["err_tls_var_aligned_over_maximum"]={
["err_tls_var_aligned_over_maximum"]={
Line 5,739: Line 6,919:
[f]="alignment (%0) of thread-local variable %1 is greater than the maximum supported alignment (%2) for a thread-local variable on this target",
[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]=n,
[g]=n,
[b]="alignment \\((.*?)\\) of thread\\-local variable (.*?) is greater than the maximum supported alignment \\((.*?)\\) for a thread\\-local variable on this target",
[h]="alignment \\((.*?)\\) of thread\\-local variable (.*?) is greater than the maximum supported alignment \\((.*?)\\) for a thread\\-local variable on this target",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it"},
[c]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it"},
[k]={{t,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();"},{O,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();"},{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;"}},
[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"}
}
},
},
["err_too_few_args_in_macro_invoc"]={
["err_too_few_args_in_macro_invoc"]={
Line 5,751: Line 6,934:
[f]="too few arguments provided to function-like macro invocation",
[f]="too few arguments provided to function-like macro invocation",
[g]=n,
[g]=n,
[b]="too few arguments provided to function\\-like macro invocation",
[h]="too few arguments provided to function\\-like macro invocation",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{jb,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);"},{jb,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]={{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);"}},
[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"}
}
},
},
["err_too_large_for_fixed_point"]={
["err_too_large_for_fixed_point"]={
Line 5,763: Line 6,949:
[f]="this value is too large for this fixed point type",
[f]="this value is too large for this fixed point type",
[g]=n,
[g]=n,
[b]="this value is too large for this fixed point type",
[h]="this value is too large for this fixed point type",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"},
[c]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_too_many_args_in_macro_invoc"]={
["err_too_many_args_in_macro_invoc"]={
Line 5,775: Line 6,964:
[f]="too many arguments provided to function-like macro invocation",
[f]="too many arguments provided to function-like macro invocation",
[g]=n,
[g]=n,
[b]="too many arguments provided to function\\-like macro invocation",
[h]="too many arguments provided to function\\-like macro invocation",
[h]=a,
[b]=a,
[j]=x,
[j]=y,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{jb,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);"},{jb,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);"},{jb,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]={{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);"}},
[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"}
}
},
},
["err_toomany_element_decls"]={
["err_toomany_element_decls"]={
Line 5,787: Line 6,979:
[f]="only one element declaration is allowed",
[f]="only one element declaration is allowed",
[g]=n,
[g]=n,
[b]="only one element declaration is allowed",
[h]="only one element declaration is allowed",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{K,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]={{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));"}},
[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"}
}
},
},
["err_trailing_requires_clause_on_deduction_guide"]={
["err_trailing_requires_clause_on_deduction_guide"]={
Line 5,799: Line 6,994:
[f]="deduction guide cannot have a requires clause",
[f]="deduction guide cannot have a requires clause",
[g]=n,
[g]=n,
[b]="deduction guide cannot have a requires clause",
[h]="deduction guide cannot have a requires clause",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{t,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]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:68:23: error: deduction guide cannot have a requires clause"}
}
},
},
["err_trailing_return_in_parens"]={
["err_trailing_return_in_parens"]={
Line 5,811: Line 7,009:
[f]="trailing return type may not be nested within parentheses",
[f]="trailing return type may not be nested within parentheses",
[g]=n,
[g]=n,
[b]="trailing return type may not be nested within parentheses",
[h]="trailing return type may not be nested within parentheses",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"},
[c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"},
[k]={{F,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]={{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();"}},
[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"}
}
},
},
["err_trailing_return_without_auto"]={
["err_trailing_return_without_auto"]={
Line 5,823: Line 7,024:
[f]="function with trailing return type must specify return type \'auto\', not %0",
[f]="function with trailing return type must specify return type \'auto\', not %0",
[g]=n,
[g]=n,
[b]="function with trailing return type must specify return type \'auto\', not (.*?)",
[h]="function with trailing return type must specify return type \'auto\', not (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[k]={{F,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]={{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();"}},
[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\'"}
}
},
},
["err_two_right_angle_brackets_need_space"]={
["err_two_right_angle_brackets_need_space"]={
Line 5,835: Line 7,039:
[f]="a space is required between consecutive right angle brackets (use \'> >\')",
[f]="a space is required between consecutive right angle brackets (use \'> >\')",
[g]=n,
[g]=n,
[b]="a space is required between consecutive right angle brackets \\(use \'\\> \\>\'\\)",
[h]="a space is required between consecutive right angle brackets \\(use \'\\> \\>\'\\)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{rb,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]={{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;"}},
[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 \'> >\')"}
}
},
},
["err_type_attribute_wrong_type"]={
["err_type_attribute_wrong_type"]={
Line 5,847: Line 7,054:
[f]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
[f]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
[g]=n,
[g]=n,
[b]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
[h]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{F,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]={{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;"}},
[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\'"}
}
},
},
["err_type_available_only_in_default_eval_method"]={
["err_type_available_only_in_default_eval_method"]={
Line 5,859: Line 7,069:
[f]="cannot use type \'%0\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[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]=n,
[g]=n,
[b]="cannot use type \'(.*?)\' within \'\\#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[h]="cannot use type \'(.*?)\' within \'\\#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{p,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]={{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();"}},
[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}
}
},
},
["err_type_constraint_missing_arguments"]={
["err_type_constraint_missing_arguments"]={
Line 5,871: Line 7,084:
[f]="%0 requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[f]="%0 requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[g]=n,
[g]=n,
[b]="(.*?) requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[h]="(.*?) requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={kb,1576172311,lb},
[c]={sb,1576172311,tb},
[k]={{q,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]={{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;"}},
[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"}
}
},
},
["err_type_constraint_non_type_concept"]={
["err_type_constraint_non_type_concept"]={
Line 5,883: Line 7,099:
[f]="concept named in type constraint is not a type concept",
[f]="concept named in type constraint is not a type concept",
[g]=n,
[g]=n,
[b]="concept named in type constraint is not a type concept",
[h]="concept named in type constraint is not a type concept",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={kb,1576172311,lb},
[c]={sb,1576172311,tb},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_type_defined_in_alias_template"]={
["err_type_defined_in_alias_template"]={
Line 5,895: Line 7,114:
[f]="%0 cannot be defined in a type alias template",
[f]="%0 cannot be defined in a type alias template",
[g]=n,
[g]=n,
[b]="(.*?) cannot be defined in a type alias template",
[h]="(.*?) cannot be defined in a type alias template",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[k]={{F,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]={{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;"}},
[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"}
}
},
},
["err_type_defined_in_condition"]={
["err_type_defined_in_condition"]={
Line 5,907: Line 7,129:
[f]="%0 cannot be defined in a condition",
[f]="%0 cannot be defined in a condition",
[g]=n,
[g]=n,
[b]="(.*?) cannot be defined in a condition",
[h]="(.*?) cannot be defined in a condition",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{F,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]={{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;"}},
[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"}
}
},
},
["err_type_defined_in_enum"]={
["err_type_defined_in_enum"]={
Line 5,919: Line 7,144:
[f]="%0 cannot be defined in an enumeration",
[f]="%0 cannot be defined in an enumeration",
[g]=n,
[g]=n,
[b]="(.*?) cannot be defined in an enumeration",
[h]="(.*?) cannot be defined in an enumeration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration."},
[c]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration."},
[k]={{t,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]={
["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:123:18: error: \'PR28903::(unnamed enum at clang/test/SemaCXX/enum.cpp:123:18)\' cannot be defined in an enumeration"}
}
},
},
["err_type_defined_in_for_range"]={
["err_type_defined_in_for_range"]={
Line 5,931: Line 7,159:
[f]="types may not be defined in a for range declaration",
[f]="types may not be defined in a for range declaration",
[g]=n,
[g]=n,
[b]="types may not be defined in a for range declaration",
[h]="types may not be defined in a for range declaration",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[c]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[k]={{K,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]={{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);"}},
[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"}
}
},
},
["err_type_defined_in_param_type"]={
["err_type_defined_in_param_type"]={
Line 5,943: Line 7,174:
[f]="%0 cannot be defined in a parameter type",
[f]="%0 cannot be defined in a parameter type",
[g]=n,
[g]=n,
[b]="(.*?) cannot be defined in a parameter type",
[h]="(.*?) cannot be defined in a parameter type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[k]={{t,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;"},{F,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;"},{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;"}},
[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"}
}
},
},
["err_type_defined_in_result_type"]={
["err_type_defined_in_result_type"]={
Line 5,955: Line 7,189:
[f]="%0 cannot be defined in the result type of a function",
[f]="%0 cannot be defined in the result type of a function",
[g]=n,
[g]=n,
[b]="(.*?) cannot be defined in the result type of a function",
[h]="(.*?) cannot be defined in the result type of a function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[k]={{F,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]={{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);"}},
[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"}
}
},
},
["err_type_defined_in_type_specifier"]={
["err_type_defined_in_type_specifier"]={
Line 5,967: Line 7,204:
[f]="%0 cannot be defined in a type specifier",
[f]="%0 cannot be defined in a type specifier",
[g]=n,
[g]=n,
[b]="(.*?) cannot be defined in a type specifier",
[h]="(.*?) cannot be defined in a type specifier",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[k]={{t,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);"},{F,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);"},{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;"}},
[o]={
["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"}
}
},
},
["err_type_mismatch_continuation_class"]={
["err_type_mismatch_continuation_class"]={
Line 5,979: Line 7,219:
[f]="type of property %0 in class extension does not match property type in primary class",
[f]="type of property %0 in class extension does not match property type in primary class",
[g]=n,
[g]=n,
[b]="type of property (.*?) in class extension does not match property type in primary class",
[h]="type of property (.*?) in class extension does not match property type in primary class",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "},
[c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "},
[k]={{Q,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]={{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();"}},
[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"}
}
},
},
["err_type_pack_element_out_of_bounds"]={
["err_type_pack_element_out_of_bounds"]={
Line 5,991: Line 7,234:
[f]="a parameter pack may not be accessed at an out of bounds index",
[f]="a parameter pack may not be accessed at an out of bounds index",
[g]=n,
[g]=n,
[b]="a parameter pack may not be accessed at an out of bounds index",
[h]="a parameter pack may not be accessed at an out of bounds index",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."},
[c]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."},
[k]={{q,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]={{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);"}},
[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"}
}
},
},
["err_type_safety_unknown_flag"]={
["err_type_safety_unknown_flag"]={
Line 6,003: Line 7,249:
[f]="invalid comparison flag %0; use \'layout_compatible\' or \'must_be_null\'",
[f]="invalid comparison flag %0; use \'layout_compatible\' or \'must_be_null\'",
[g]=n,
[g]=n,
[b]="invalid comparison flag (.*?); use \'layout_compatible\' or \'must_be_null\'",
[h]="invalid comparison flag (.*?); use \'layout_compatible\' or \'must_be_null\'",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{R,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]={{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;"}},
[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\'"}
}
},
},
["err_type_tag_for_datatype_not_ice"]={
["err_type_tag_for_datatype_not_ice"]={
Line 6,015: Line 7,264:
[f]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression",
[f]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression",
[g]=n,
[g]=n,
[b]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression",
[h]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{t,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]={
["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:16:45: error: \'type_tag_for_datatype\' attribute requires the initializer to be an integral constant expression"}
}
},
},
["err_type_tag_for_datatype_too_large"]={
["err_type_tag_for_datatype_too_large"]={
Line 6,027: Line 7,279:
[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",
[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]=n,
[g]=n,
[b]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression that can be represented by a 64 bit integer",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{t,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"]={
Line 6,039: Line 7,291:
[f]="type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3",
[f]="type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3",
[g]=n,
[g]=n,
[b]="type trait requires (.*?)(?:| or more) argument(?:|s); have (.*?) argument(.*?)",
[h]="type trait requires (.*?)(?:| or more) argument(?:|s); have (.*?) argument(.*?)",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)"},
[c]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)"},
[k]={{E,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);"},{E,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]={{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);"}},
[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"}
}
},
},
["err_type_unsupported"]={
["err_type_unsupported"]={
Line 6,051: Line 7,306:
[f]="%0 is not supported on this target",
[f]="%0 is not supported on this target",
[g]=n,
[g]=n,
[b]="(.*?) is not supported on this target",
[h]="(.*?) is not supported on this target",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"},
[c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"},
[k]={{F,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\";"},{F,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\";"},{F,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\";"},{F,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\";"},{F,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\";"},{F,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]={{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\";"}}
},
},
["err_typecheck_address_of"]={
["err_typecheck_address_of"]={
Line 6,063: Line 7,318:
[f]="address of %select{bit-field|vector element|property expression|register variable|matrix element}0 requested",
[f]="address of %select{bit-field|vector element|property expression|register variable|matrix element}0 requested",
[g]=n,
[g]=n,
[b]="address of (?:bit\\-field|vector element|property expression|register variable|matrix element) requested",
[h]="address of (?:bit\\-field|vector element|property expression|register variable|matrix element) requested",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{hb,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();"},{p,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}}
[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(); }"}},
[o]={
["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"}
}
},
},
["err_typecheck_addrof_dtor"]={
["err_typecheck_addrof_dtor"]={
Line 6,075: Line 7,333:
[f]="taking the address of a destructor",
[f]="taking the address of a destructor",
[g]=n,
[g]=n,
[b]="taking the address of a destructor",
[h]="taking the address of a destructor",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."},
[c]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."},
[k]={{p,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]={{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();"}}
},
},
["err_typecheck_addrof_temporary"]={
["err_typecheck_addrof_temporary"]={
Line 6,087: Line 7,345:
[f]="taking the address of a temporary object of type %0",
[f]="taking the address of a temporary object of type %0",
[g]=n,
[g]=n,
[b]="taking the address of a temporary object of type (.*?)",
[h]="taking the address of a temporary object of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[k]={{p,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]={{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();"}}
},
},
["err_typecheck_ambiguous_condition"]={
["err_typecheck_ambiguous_condition"]={
Line 6,099: Line 7,357:
[f]="conversion %diff{from $ to $|between types}0,1 is ambiguous",
[f]="conversion %diff{from $ to $|between types}0,1 is ambiguous",
[g]=n,
[g]=n,
[b]="conversion (?:from (.*?) to (.*?)|between types) is ambiguous",
[h]="conversion (?:from (.*?) to (.*?)|between types) is ambiguous",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."},
[c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."},
[k]={{E,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());"},{D,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);"},{ab,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_arc_assign_externally_retained"]={
["err_typecheck_arc_assign_externally_retained"]={
Line 6,111: Line 7,372:
[f]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[f]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[g]=n,
[g]=n,
[b]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[h]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[h]=a,
[b]=a,
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[c]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_arc_assign_self"]={
["err_typecheck_arc_assign_self"]={
Line 6,123: Line 7,387:
[f]="cannot assign to \'self\' outside of a method in the init family",
[f]="cannot assign to \'self\' outside of a method in the init family",
[g]=n,
[g]=n,
[b]="cannot assign to \'self\' outside of a method in the init family",
[h]="cannot assign to \'self\' outside of a method in the init family",
[h]=a,
[b]=a,
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_arc_assign_self_class_method"]={
["err_typecheck_arc_assign_self_class_method"]={
Line 6,135: Line 7,402:
[f]="cannot assign to \'self\' in a class method",
[f]="cannot assign to \'self\' in a class method",
[g]=n,
[g]=n,
[b]="cannot assign to \'self\' in a class method",
[h]="cannot assign to \'self\' in a class method",
[h]=a,
[b]=a,
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[k]={{p,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]={{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;"}}
},
},
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
Line 6,147: Line 7,414:
[f]="arithmetic on a pointer to %select{an incomplete|sizeless}0 type %1",
[f]="arithmetic on a pointer to %select{an incomplete|sizeless}0 type %1",
[g]=n,
[g]=n,
[b]="arithmetic on a pointer to (?:an incomplete|sizeless) type (.*?)",
[h]="arithmetic on a pointer to (?:an incomplete|sizeless) type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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());"}},
[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[]\'"}
}
},
},
["err_typecheck_arr_assign_enumeration"]={
["err_typecheck_arr_assign_enumeration"]={
Line 6,159: Line 7,429:
[f]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[f]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[g]=n,
[g]=n,
[b]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[h]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[h]=a,
[b]=a,
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"31168b077c36",1308178962,"Automatic Reference Counting."},
[c]={"31168b077c36",1308178962,"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())) {"},{p,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())) {"},{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;"}},
[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"}
}
},
},
["err_typecheck_array_not_modifiable_lvalue"]={
["err_typecheck_array_not_modifiable_lvalue"]={
Line 6,171: Line 7,444:
[f]="array type %0 is not assignable",
[f]="array type %0 is not assignable",
[g]=n,
[g]=n,
[b]="array type (.*?) is not assignable",
[h]="array type (.*?) is not assignable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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;"}}
},
},
["err_typecheck_assign_const"]={
["err_typecheck_assign_const"]={
Line 6,183: Line 7,456:
[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",
[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]=n,
[g]=n,
[b]="(?: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)",
[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)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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();"},{p,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();"},{p,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;"},{p,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();"},{p,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;"},{p,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;"},{p,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]={{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;"}},
[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\'"}
}
},
},
["err_typecheck_bool_condition"]={
["err_typecheck_bool_condition"]={
Line 6,195: Line 7,471:
[f]="value of type %0 is not contextually convertible to \'bool\'",
[f]="value of type %0 is not contextually convertible to \'bool\'",
[g]=n,
[g]=n,
[b]="value of type (.*?) is not contextually convertible to \'bool\'",
[h]="value of type (.*?) is not contextually convertible to \'bool\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{ab,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]={{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();"}},
[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\'"}
}
},
},
["err_typecheck_call_different_arg_types"]={
["err_typecheck_call_different_arg_types"]={
Line 6,207: Line 7,486:
[f]="arguments are of different types%diff{ ($ vs $)|}0,1",
[f]="arguments are of different types%diff{ ($ vs $)|}0,1",
[g]=n,
[g]=n,
[b]="arguments are of different types(?: \\((.*?) vs (.*?)\\)|)",
[h]="arguments are of different types(?: \\((.*?) vs (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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;"},{v,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();"},{v,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;"},{v,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]={
["clang/test/Sema/builtins-elementwise-math.c"]={"clang/test/Sema/builtins-elementwise-math.c:47:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:62:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:65:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:105:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:120:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:123:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:163:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:178:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:181:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:218:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:233:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:236:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:442:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:457:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:460:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:690:53: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:693:50: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:697:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:700:50: error: arguments are of different types (\'float\' vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:705:56: error: arguments are of different types (\'double4\' (vector of 4 \'double\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:708:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'double4\' (vector of 4 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:711:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:714:55: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:739:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:742:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:745:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:748:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:751:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:754:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:757:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:760:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:763:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double2\' (vector of 2 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:766:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:769:37: error: arguments are of different types (\'double\' vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:772:37: error: arguments are of different types (\'double\' vs \'double2\' (vector of 2 \'double\' values))"}
}
},
},
["err_typecheck_call_invalid_ordered_compare"]={
["err_typecheck_call_invalid_ordered_compare"]={
Line 6,219: Line 7,501:
[f]="ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1",
[f]="ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1",
[g]=n,
[g]=n,
[b]="ordered compare requires two args of floating point type(?: \\((.*?) and (.*?)\\)|)",
[h]="ordered compare requires two args of floating point type(?: \\((.*?) and (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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]={
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:8:32: error: ordered compare requires two args of floating point type (\'int\' and \'int\')","clang/test/Sema/builtins.c:15:32: error: ordered compare requires two args of floating point type (\'int *\' and \'double\')"}
}
},
},
["err_typecheck_call_invalid_unary_fp"]={
["err_typecheck_call_invalid_unary_fp"]={
Line 6,231: Line 7,516:
[f]="floating point classification requires argument of floating point type (passed in %0)",
[f]="floating point classification requires argument of floating point type (passed in %0)",
[g]=n,
[g]=n,
[b]="floating point classification requires argument of floating point type \\(passed in (.*?)\\)",
[h]="floating point classification requires argument of floating point type \\(passed in (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they "},
[c]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they "},
[k]={{v,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]={
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:9:28: error: floating point classification requires argument of floating point type (passed in \'int\')","clang/test/Sema/builtin-unary-fp.c:13:45: error: floating point classification requires argument of floating point type (passed in \'int\')"}
}
},
},
["err_typecheck_call_not_function"]={
["err_typecheck_call_not_function"]={
Line 6,243: Line 7,531:
[f]="called object type %0 is not a function or function pointer",
[f]="called object type %0 is not a function or function pointer",
[g]=n,
[g]=n,
[b]="called object type (.*?) is not a function or function pointer",
[h]="called object type (.*?) is not a function or function pointer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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());"},{p,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]={{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());"}},
[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"}
}
},
},
["err_typecheck_call_requires_real_fp"]={
["err_typecheck_call_requires_real_fp"]={
Line 6,255: Line 7,546:
[f]="argument type %0 is not a real floating point type",
[f]="argument type %0 is not a real floating point type",
[g]=n,
[g]=n,
[b]="argument type (.*?) is not a real floating point type",
[h]="argument type (.*?) is not a real floating point type",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={T,1582847864,S},
[c]={U,1582847864,V},
[k]={{v,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]={
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:373:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:374:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:375:26: error: argument type \'int\' is not a real floating point type"}
}
},
},
["err_typecheck_call_too_few_args"]={
["err_typecheck_call_too_few_args"]={
Line 6,267: Line 7,561:
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[g]=n,
[g]=n,
[b]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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();"},{v,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;"},{v,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();"},{p,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();"},{db,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();"},{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());"}},
[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"}
}
},
},
["err_typecheck_call_too_few_args_at_least"]={
["err_typecheck_call_too_few_args_at_least"]={
Line 6,279: Line 7,576:
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2",
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2",
[g]=n,
[g]=n,
[b]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?)",
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number"},
[c]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number"},
[k]={{v,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();"},{v,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;"},{v,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();"},{v,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();"},{v,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();"},{v,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());"},{p,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());"},{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();"}},
[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"}
}
},
},
["err_typecheck_call_too_few_args_at_least_one"]={
["err_typecheck_call_too_few_args_at_least_one"]={
Line 6,291: Line 7,591:
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified",
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified",
[g]=n,
[g]=n,
[b]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, at least argument (.*?) must be specified",
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, at least argument (.*?) must be specified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[k]={{p,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_call_too_few_args_at_least_suggest"]={
["err_typecheck_call_too_few_args_at_least_suggest"]={
Line 6,303: Line 7,606:
[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?",
[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]=n,
[g]=n,
[b]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?); did you mean (.*?)\\?",
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?); did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,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]={{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;"}}
},
},
["err_typecheck_call_too_few_args_one"]={
["err_typecheck_call_too_few_args_one"]={
Line 6,315: Line 7,618:
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified",
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified",
[g]=n,
[g]=n,
[b]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, single argument (.*?) was not specified",
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, single argument (.*?) was not specified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[k]={{p,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_call_too_few_args_suggest"]={
["err_typecheck_call_too_few_args_suggest"]={
Line 6,327: Line 7,633:
[f]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[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]=n,
[g]=n,
[b]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[h]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,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]={{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;"}},
[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\'?"}
}
},
},
["err_typecheck_call_too_many_args"]={
["err_typecheck_call_too_many_args"]={
Line 6,339: Line 7,648:
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[g]=n,
[g]=n,
[b]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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();"},{v,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;"},{v,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();"},{p,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());"},{db,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();"},{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());"}},
[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"}
}
},
},
["err_typecheck_call_too_many_args_at_most"]={
["err_typecheck_call_too_many_args_at_most"]={
Line 6,351: Line 7,663:
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2",
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2",
[g]=n,
[g]=n,
[b]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?)",
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give"},
[c]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give"},
[k]={{v,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();"},{v,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();"},{v,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();"},{p,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();"},{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());"}},
[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"}
}
},
},
["err_typecheck_call_too_many_args_at_most_one"]={
["err_typecheck_call_too_many_args_at_most_one"]={
Line 6,363: Line 7,678:
[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",
[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]=n,
[g]=n,
[b]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most single argument (.*?), have (.*?) arguments",
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most single argument (.*?), have (.*?) arguments",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[k]={{p,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]={{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());"}},
[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"}
}
},
},
["err_typecheck_call_too_many_args_at_most_suggest"]={
["err_typecheck_call_too_many_args_at_most_suggest"]={
Line 6,375: Line 7,693:
[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?",
[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]=n,
[g]=n,
[b]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?); did you mean (.*?)\\?",
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?); did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,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]={{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;"}}
},
},
["err_typecheck_call_too_many_args_one"]={
["err_typecheck_call_too_many_args_one"]={
Line 6,387: Line 7,705:
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments",
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments",
[g]=n,
[g]=n,
[b]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected single argument (.*?), have (.*?) arguments",
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected single argument (.*?), have (.*?) arguments",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[k]={{p,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]={{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());"}},
[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"}
}
},
},
["err_typecheck_call_too_many_args_suggest"]={
["err_typecheck_call_too_many_args_suggest"]={
Line 6,399: Line 7,720:
[f]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[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]=n,
[g]=n,
[b]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[h]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,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]={{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;"}},
[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\'?"}
}
},
},
["err_typecheck_cast_to_incomplete"]={
["err_typecheck_cast_to_incomplete"]={
Line 6,411: Line 7,735:
[f]="cast to incomplete type %0",
[f]="cast to incomplete type %0",
[g]=n,
[g]=n,
[b]="cast to incomplete type (.*?)",
[h]="cast to incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to"},
[c]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to"},
[k]={{eb,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)) {"},{eb,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)) {"},{p,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]={{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))"}},
[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\'"}
}
},
},
["err_typecheck_cast_to_union_no_type"]={
["err_typecheck_cast_to_union_no_type"]={
Line 6,423: Line 7,750:
[f]="cast to union type from type %0 not present in union",
[f]="cast to union type from type %0 not present in union",
[g]=n,
[g]=n,
[b]="cast to union type from type (.*?) not present in union",
[h]="cast to union type from type (.*?) not present in union",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{eb,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_choose_expr_requires_constant"]={
["err_typecheck_choose_expr_requires_constant"]={
Line 6,435: Line 7,765:
[f]="\'__builtin_choose_expr\' requires a constant expression",
[f]="\'__builtin_choose_expr\' requires a constant expression",
[g]=n,
[g]=n,
[b]="\'__builtin_choose_expr\' requires a constant expression",
[h]="\'__builtin_choose_expr\' requires a constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_typecheck_comparison_of_distinct_blocks"]={
["err_typecheck_comparison_of_distinct_blocks"]={
Line 6,447: Line 7,780:
[f]="comparison of distinct block types%diff{ ($ and $)|}0,1",
[f]="comparison of distinct block types%diff{ ($ and $)|}0,1",
[g]=n,
[g]=n,
[b]="comparison of distinct block types(?: \\((.*?) and (.*?)\\)|)",
[h]="comparison of distinct block types(?: \\((.*?) and (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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();"},{p,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]={{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();"}}
},
},
["err_typecheck_comparison_of_distinct_pointers"]={
["err_typecheck_comparison_of_distinct_pointers"]={
Line 6,459: Line 7,792:
[f]="comparison of distinct pointer types%diff{ ($ and $)|}0,1",
[f]="comparison of distinct pointer types%diff{ ($ and $)|}0,1",
[g]=n,
[g]=n,
[b]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)",
[h]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="},
[c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="},
[k]={{p,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]={{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(); }"}},
[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 (*)()\'))"}
}
},
},
["err_typecheck_comparison_of_fptr_to_void"]={
["err_typecheck_comparison_of_fptr_to_void"]={
Line 6,471: Line 7,807:
[f]="equality comparison between function pointer and void pointer (%0 and %1)",
[f]="equality comparison between function pointer and void pointer (%0 and %1)",
[g]=n,
[g]=n,
[b]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)",
[h]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[k]={{p,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]={{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(); }"}}
},
},
["err_typecheck_comparison_of_pointer_integer"]={
["err_typecheck_comparison_of_pointer_integer"]={
Line 6,483: Line 7,819:
[f]="comparison between pointer and integer (%0 and %1)",
[f]="comparison between pointer and integer (%0 and %1)",
[g]=n,
[g]=n,
[b]="comparison between pointer and integer \\((.*?) and (.*?)\\)",
[h]="comparison between pointer and integer \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[k]={{p,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]={{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;"}},
[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 *\')"}
}
},
},
["err_typecheck_cond_expect_int_float"]={
["err_typecheck_cond_expect_int_float"]={
Line 6,495: Line 7,834:
[f]="used type %0 where integer or floating point type is required",
[f]="used type %0 where integer or floating point type is required",
[g]=n,
[g]=n,
[b]="used type (.*?) where integer or floating point type is required",
[h]="used type (.*?) where integer or floating point type is required",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[k]={{p,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();"},{p,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_cond_expect_nonfloat"]={
["err_typecheck_cond_expect_nonfloat"]={
Line 6,507: Line 7,849:
[f]="used type %0 where floating point type is not allowed",
[f]="used type %0 where floating point type is not allowed",
[g]=n,
[g]=n,
[b]="used type (.*?) where floating point type is not allowed",
[h]="used type (.*?) where floating point type is not allowed",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[k]={{p,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();"},{p,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_cond_expect_scalar"]={
["err_typecheck_cond_expect_scalar"]={
Line 6,519: Line 7,864:
[f]="used type %0 where arithmetic or pointer type is required",
[f]="used type %0 where arithmetic or pointer type is required",
[g]=n,
[g]=n,
[b]="used type (.*?) where arithmetic or pointer type is required",
[h]="used type (.*?) where arithmetic or pointer type is required",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{eb,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();"},{p,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_cond_incompatible_operands"]={
["err_typecheck_cond_incompatible_operands"]={
Line 6,531: Line 7,879:
[f]="incompatible operand types%diff{ ($ and $)|}0,1",
[f]="incompatible operand types%diff{ ($ and $)|}0,1",
[g]=n,
[g]=n,
[b]="incompatible operand types(?: \\((.*?) and (.*?)\\)|)",
[h]="incompatible operand types(?: \\((.*?) and (.*?)\\)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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();"},{p,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();"},{p,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();"},{p,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();"},{E,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();"},{E,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();"},{E,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]={{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();"}},
[o]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"}
}
},
},
["err_typecheck_cond_incompatible_operands_null"]={
["err_typecheck_cond_incompatible_operands_null"]={
Line 6,543: Line 7,894:
[f]="non-pointer operand type %0 incompatible with %select{NULL|nullptr}1",
[f]="non-pointer operand type %0 incompatible with %select{NULL|nullptr}1",
[g]=n,
[g]=n,
[b]="non\\-pointer operand type (.*?) incompatible with (?:NULL|nullptr)",
[h]="non\\-pointer operand type (.*?) incompatible with (?:NULL|nullptr)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and"},
[c]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and"},
[k]={{p,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_convert_discards_qualifiers"]={
["err_typecheck_convert_discards_qualifiers"]={
Line 6,555: Line 7,909:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_convert_incompatible"]={
["err_typecheck_convert_incompatible"]={
Line 6,567: Line 7,924:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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)",
[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)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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;"},{v,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 */"},{v,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 */"},{v,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;"},{p,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;"},{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;"}},
[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"}
}
},
},
["err_typecheck_convert_incompatible_block_pointer"]={
["err_typecheck_convert_incompatible_block_pointer"]={
Line 6,579: Line 7,939:
[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",
[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]=n,
[g]=n,
[b]="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))",
[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))",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the"},
[c]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the"},
[k]={{p,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]={{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;"}},
[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)\'"}
}
},
},
["err_typecheck_convert_incompatible_function_pointer"]={
["err_typecheck_convert_incompatible_function_pointer"]={
Line 6,591: Line 7,954:
[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",
[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]=n,
[g]=n,
[b]="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 &)",
[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 &)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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;"}},
[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 (*)()\'"}
}
},
},
["err_typecheck_convert_incompatible_pointer"]={
["err_typecheck_convert_incompatible_pointer"]={
Line 6,603: Line 7,969:
[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",
[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]=n,
[g]=n,
[b]="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 &)",
[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 &)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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;"}},
[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 *\'"}
}
},
},
["err_typecheck_convert_incompatible_pointer_sign"]={
["err_typecheck_convert_incompatible_pointer_sign"]={
Line 6,615: Line 7,984:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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)",
[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)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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;"},{p,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]={{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) {"}},
[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"}
}
},
},
["err_typecheck_convert_int_pointer"]={
["err_typecheck_convert_int_pointer"]={
Line 6,627: Line 7,999:
[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",
[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]=n,
[g]=n,
[b]="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 &)",
[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 &)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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;"}},
[o]={
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"}
}
},
},
["err_typecheck_convert_pointer_int"]={
["err_typecheck_convert_pointer_int"]={
Line 6,639: Line 8,014:
[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",
[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]=n,
[g]=n,
[b]="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 &)",
[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 &)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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;"}},
[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\'"}
}
},
},
["err_typecheck_convert_pointer_void_func"]={
["err_typecheck_convert_pointer_void_func"]={
Line 6,651: Line 8,029:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={G,1576908663,H},
[c]={H,1576908663,I},
[k]={{p,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]={{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;"}}
},
},
["err_typecheck_converted_constant_expression"]={
["err_typecheck_converted_constant_expression"]={
Line 6,663: Line 8,041:
[f]="value of type %0 is not implicitly convertible to %1",
[f]="value of type %0 is not implicitly convertible to %1",
[g]=n,
[g]=n,
[b]="value of type (.*?) is not implicitly convertible to (.*?)",
[h]="value of type (.*?) is not implicitly convertible to (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[k]={{ab,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]={{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;"}},
[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\')"}
}
},
},
["err_typecheck_converted_constant_expression_disallowed"]={
["err_typecheck_converted_constant_expression_disallowed"]={
Line 6,675: Line 8,056:
[f]="conversion from %0 to %1 is not allowed in a converted constant expression",
[f]="conversion from %0 to %1 is not allowed in a converted constant expression",
[g]=n,
[g]=n,
[b]="conversion from (.*?) to (.*?) is not allowed in a converted constant expression",
[h]="conversion from (.*?) to (.*?) is not allowed in a converted constant expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[k]={{ab,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_converted_constant_expression_indirect"]={
["err_typecheck_converted_constant_expression_indirect"]={
Line 6,687: Line 8,071:
[f]="conversion from %0 to %1 in converted constant expression would bind reference to a temporary",
[f]="conversion from %0 to %1 in converted constant expression would bind reference to a temporary",
[g]=n,
[g]=n,
[b]="conversion from (.*?) to (.*?) in converted constant expression would bind reference to a temporary",
[h]="conversion from (.*?) to (.*?) in converted constant expression would bind reference to a temporary",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[k]={{ab,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_decl_incomplete_type"]={
["err_typecheck_decl_incomplete_type"]={
Line 6,699: Line 8,086:
[f]="variable has incomplete type %0",
[f]="variable has incomplete type %0",
[g]=n,
[g]=n,
[b]="variable has incomplete type (.*?)",
[h]="variable has incomplete type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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))) {"},{t,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;"},{t,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)) {"},{t,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)) {"},{t,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)) {"},{t,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))"},{t,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)) {"},{y,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n  if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{p,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)) {"},{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())))"}},
[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>\'"}
}
},
},
["err_typecheck_deleted_function"]={
["err_typecheck_deleted_function"]={
Line 6,711: Line 8,101:
[f]="conversion function %diff{from $ to $|between types}0,1 invokes a deleted function",
[f]="conversion function %diff{from $ to $|between types}0,1 invokes a deleted function",
[g]=n,
[g]=n,
[b]="conversion function (?:from (.*?) to (.*?)|between types) invokes a deleted function",
[h]="conversion function (?:from (.*?) to (.*?)|between types) invokes a deleted function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,Bb},
[k]={{D,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]={{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();"}},
[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"}
}
},
},
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
Line 6,723: Line 8,116:
[f]="vector is not assignable (contains duplicate components)",
[f]="vector is not assignable (contains duplicate components)",
[g]=n,
[g]=n,
[b]="vector is not assignable \\(contains duplicate components\\)",
[h]="vector is not assignable \\(contains duplicate components\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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;"}},
[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)"}
}
},
},
["err_typecheck_expect_flt_or_vector"]={
["err_typecheck_expect_flt_or_vector"]={
Line 6,735: Line 8,131:
[f]="invalid operand of type %0 where floating, complex or a vector of such types is required",
[f]="invalid operand of type %0 where floating, complex or a vector of such types is required",
[g]=n,
[g]=n,
[b]="invalid operand of type (.*?) where floating, complex or a vector of such types is required",
[h]="invalid operand of type (.*?) where floating, complex or a vector of such types is required",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={pb,1615397021,ub},
[c]={yb,1615397021,zb},
[k]={{v,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]={
["clang/test/Sema/arithmetic-fence-builtin.c"]={"clang/test/Sema/arithmetic-fence-builtin.c:21:27: error: invalid operand of type \'stype\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:32:31: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'float *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'int *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:12:34: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required"}
}
},
},
["err_typecheck_expect_int"]={
["err_typecheck_expect_int"]={
Line 6,747: Line 8,146:
[f]="used type %0 where integer is required",
[f]="used type %0 where integer is required",
[g]=n,
[g]=n,
[b]="used type (.*?) where integer is required",
[h]="used type (.*?) where integer is required",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[k]={{v,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();"},{v,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();"},{p,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();"},{p,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();"},{p,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();"},{p,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();"},{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();"}},
[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"}
}
},
},
["err_typecheck_expect_scalar_operand"]={
["err_typecheck_expect_scalar_operand"]={
Line 6,759: Line 8,161:
[f]="operand of type %0 where arithmetic or pointer type is required",
[f]="operand of type %0 where arithmetic or pointer type is required",
[g]=n,
[g]=n,
[b]="operand of type (.*?) where arithmetic or pointer type is required",
[h]="operand of type (.*?) where arithmetic or pointer type is required",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{eb,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();"},{v,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_expression_not_modifiable_lvalue"]={
["err_typecheck_expression_not_modifiable_lvalue"]={
Line 6,771: Line 8,176:
[f]="expression is not assignable",
[f]="expression is not assignable",
[g]=n,
[g]=n,
[b]="expression is not assignable",
[h]="expression is not assignable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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;"}}
},
},
["err_typecheck_field_variable_size"]={
["err_typecheck_field_variable_size"]={
Line 6,783: Line 8,188:
[f]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[f]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[g]=n,
[g]=n,
[b]="fields must have a constant size\\: \'variable length array in structure\' extension will never be supported",
[h]="fields must have a constant size\\: \'variable length array in structure\' extension will never be supported",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:17:28: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported","clang/test/Sema/vla.c:74:7: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported"}
}
},
},
["err_typecheck_illegal_increment_decrement"]={
["err_typecheck_illegal_increment_decrement"]={
Line 6,795: Line 8,203:
[f]="cannot %select{decrement|increment}1 value of type %0",
[f]="cannot %select{decrement|increment}1 value of type %0",
[g]=n,
[g]=n,
[b]="cannot (?:decrement|increment) value of type (.*?)",
[h]="cannot (?:decrement|increment) value of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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();"}},
[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\'"}
}
},
},
["err_typecheck_incompatible_address_space"]={
["err_typecheck_incompatible_address_space"]={
Line 6,807: Line 8,218:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of "},
[c]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of "},
[k]={{eb,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;"},{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_incompatible_nested_address_space"]={
["err_typecheck_incompatible_nested_address_space"]={
Line 6,819: Line 8,233:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter."},
[c]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter."},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_incompatible_ownership"]={
["err_typecheck_incompatible_ownership"]={
Line 6,831: Line 8,248:
[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",
[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]=n,
[g]=n,
[b]="(?:(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[c]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[k]={{eb,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();"},{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_incomplete_array_needs_initializer"]={
["err_typecheck_incomplete_array_needs_initializer"]={
Line 6,843: Line 8,263:
[f]="definition of variable with array type needs an explicit size or an initializer",
[f]="definition of variable with array type needs an explicit size or an initializer",
[g]=n,
[g]=n,
[b]="definition of variable with array type needs an explicit size or an initializer",
[h]="definition of variable with array type needs an explicit size or an initializer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"},
[c]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"},
[k]={{t,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]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp:23:5: error: definition of variable with array type needs an explicit size or an initializer"}
}
},
},
["err_typecheck_incomplete_tag"]={
["err_typecheck_incomplete_tag"]={
Line 6,855: Line 8,278:
[f]="incomplete definition of type %0",
[f]="incomplete definition of type %0",
[g]=n,
[g]=n,
[b]="incomplete definition of type (.*?)",
[h]="incomplete definition of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{I,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))"},{I,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;"},{I,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()))"},{ab,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]={{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))"}},
[o]={
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"}
}
},
},
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
Line 6,867: Line 8,293:
[f]="incomplete type %0 is not assignable",
[f]="incomplete type %0 is not assignable",
[g]=n,
[g]=n,
[b]="incomplete type (.*?) is not assignable",
[h]="incomplete type (.*?) is not assignable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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);"}},
[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"}
}
},
},
["err_typecheck_indirection_requires_pointer"]={
["err_typecheck_indirection_requires_pointer"]={
Line 6,879: Line 8,308:
[f]="indirection requires pointer operand (%0 invalid)",
[f]="indirection requires pointer operand (%0 invalid)",
[g]=n,
[g]=n,
[b]="indirection requires pointer operand \\((.*?) invalid\\)",
[h]="indirection requires pointer operand \\((.*?) invalid\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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();"}},
[o]={
["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"}
}
},
},
["err_typecheck_indirection_through_void_pointer_cpp"]={
["err_typecheck_indirection_through_void_pointer_cpp"]={
Line 6,891: Line 8,323:
[f]="indirection not permitted on operand of type %0",
[f]="indirection not permitted on operand of type %0",
[g]=n,
[g]=n,
[b]="indirection not permitted on operand of type (.*?)",
[h]="indirection not permitted on operand of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{p,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]={{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();"}},
[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 *\'"}
}
},
},
["err_typecheck_invalid_lvalue_addrof"]={
["err_typecheck_invalid_lvalue_addrof"]={
Line 6,903: Line 8,338:
[f]="cannot take the address of an rvalue of type %0",
[f]="cannot take the address of an rvalue of type %0",
[g]=n,
[g]=n,
[b]="cannot take the address of an rvalue of type (.*?)",
[h]="cannot take the address of an rvalue of type (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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();"}},
[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)"}
}
},
},
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
Line 6,915: Line 8,353:
[f]="extra \'&\' taking address of overloaded function",
[f]="extra \'&\' taking address of overloaded function",
[g]=n,
[g]=n,
[b]="extra \'&\' taking address of overloaded function",
[h]="extra \'&\' taking address of overloaded function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[k]={{p,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]={{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();"}},
[o]={
["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"}
}
},
},
["err_typecheck_invalid_operands"]={
["err_typecheck_invalid_operands"]={
Line 6,927: Line 8,368:
[f]="invalid operands to binary expression (%0 and %1)",
[f]="invalid operands to binary expression (%0 and %1)",
[g]=n,
[g]=n,
[b]="invalid operands to binary expression \\((.*?) and (.*?)\\)",
[h]="invalid operands to binary expression \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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();"},{p,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  unsigned DiagID = diag::err_typecheck_invalid_operands;"},{p,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();"},{p,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();"},{p,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]={{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();"}},
[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\')"}
}
},
},
["err_typecheck_invalid_restrict_invalid_pointee"]={
["err_typecheck_invalid_restrict_invalid_pointee"]={
Line 6,939: Line 8,383:
[f]="pointer to function type %0 may not be \'restrict\' qualified",
[f]="pointer to function type %0 may not be \'restrict\' qualified",
[g]=n,
[g]=n,
[b]="pointer to function type (.*?) may not be \'restrict\' qualified",
[h]="pointer to function type (.*?) may not be \'restrict\' qualified",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{F,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_invalid_restrict_not_pointer"]={
["err_typecheck_invalid_restrict_not_pointer"]={
Line 6,951: Line 8,398:
[f]="restrict requires a pointer or reference (%0 is invalid)",
[f]="restrict requires a pointer or reference (%0 is invalid)",
[g]=n,
[g]=n,
[b]="restrict requires a pointer or reference \\((.*?) is invalid\\)",
[h]="restrict requires a pointer or reference \\((.*?) is invalid\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{F,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]={{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;"}},
[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)"}
}
},
},
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
Line 6,963: Line 8,413:
[f]="restrict requires a pointer or reference",
[f]="restrict requires a pointer or reference",
[g]=n,
[g]=n,
[b]="restrict requires a pointer or reference",
[h]="restrict requires a pointer or reference",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a..."},
[c]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a..."},
[k]={{t,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]={
["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:66:10: error: restrict requires a pointer or reference"}
}
},
},
["err_typecheck_ivar_variable_size"]={
["err_typecheck_ivar_variable_size"]={
Line 6,975: Line 8,428:
[f]="instance variables must have a constant size",
[f]="instance variables must have a constant size",
[g]=n,
[g]=n,
[b]="instance variables must have a constant size",
[h]="instance variables must have a constant size",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/SemaObjC/variable-size-ivar.m"]={"clang/test/SemaObjC/variable-size-ivar.m:9:7: error: instance variables must have a constant size"}
}
},
},
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
Line 6,987: Line 8,443:
[f]="logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++",
[f]="logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++",
[g]=n,
[g]=n,
[b]="logical expression with vector (?:type (.*?) and non\\-vector type (.*?)|types (.*?) and (.*?)) is only supported in C\\+\\+",
[h]="logical expression with vector (?:type (.*?) and non\\-vector type (.*?)|types (.*?) and (.*?)) is only supported in C\\+\\+",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[k]={{p,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();"},{p,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]={{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();"}},
[o]={
["clang/test/Sema/vector-ops.c"]={
[1]="clang/test/Sema/vector-ops.c:32:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[2]="clang/test/Sema/vector-ops.c:33:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[3]="clang/test/Sema/vector-ops.c:35:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[4]="clang/test/Sema/vector-ops.c:36:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[5]="clang/test/Sema/vector-ops.c:38:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[6]="clang/test/Sema/vector-ops.c:39:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[7]="clang/test/Sema/vector-ops.c:41:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[8]="clang/test/Sema/vector-ops.c:42:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[9]="clang/test/Sema/vector-ops.c:44:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[10]="clang/test/Sema/vector-ops.c:45:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[11]="clang/test/Sema/vector-ops.c:47:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[12]="clang/test/Sema/vector-ops.c:48:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[13]="clang/test/Sema/vector-ops.c:50:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[14]="clang/test/Sema/vector-ops.c:51:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[15]="clang/test/Sema/vector-ops.c:53:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[16]="clang/test/Sema/vector-ops.c:54:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[17]="clang/test/Sema/vector-ops.c:56:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[18]="clang/test/Sema/vector-ops.c:57:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[19]="clang/test/Sema/vector-ops.c:59:15: error: logical expression with vector types \'v2f\' (vector of 2 \'float\' values) and \'v2f\' is only supported in C++",
[20]="clang/test/Sema/vector-ops.c:60:15: error: logical expression with vector types \'v2f\' (vector of 2 \'float\' values) and \'v2f\' is only supported in C++",
[21]="clang/test/Sema/vector-ops.c:62:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[22]="clang/test/Sema/vector-ops.c:63:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[23]="clang/test/Sema/vector-ops.c:65:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[24]="clang/test/Sema/vector-ops.c:66:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[25]="clang/test/Sema/vector-ops.c:68:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[26]="clang/test/Sema/vector-ops.c:69:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[27]="clang/test/Sema/vector-ops.c:71:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[28]="clang/test/Sema/vector-ops.c:72:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[29]="clang/test/Sema/vector-ops.c:74:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[30]="clang/test/Sema/vector-ops.c:75:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[31]="clang/test/Sema/vector-ops.c:80:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[32]="clang/test/Sema/vector-ops.c:81:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[33]="clang/test/Sema/vector-ops.c:88:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[34]="clang/test/Sema/vector-ops.c:89:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[35]="clang/test/Sema/vector-ops.c:98:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[36]="clang/test/Sema/vector-ops.c:99:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[37]="clang/test/Sema/vector-ops.c:101:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[38]="clang/test/Sema/vector-ops.c:102:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[39]="clang/test/Sema/vector-ops.c:104:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[40]="clang/test/Sema/vector-ops.c:105:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[41]="clang/test/Sema/vector-ops.c:107:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[42]="clang/test/Sema/vector-ops.c:108:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[43]="clang/test/Sema/vector-ops.c:117:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[44]="clang/test/Sema/vector-ops.c:118:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[45]="clang/test/Sema/vector-ops.c:120:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[46]="clang/test/Sema/vector-ops.c:121:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[47]="clang/test/Sema/vector-ops.c:123:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[48]="clang/test/Sema/vector-ops.c:124:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[49]="clang/test/Sema/vector-ops.c:126:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[50]="clang/test/Sema/vector-ops.c:127:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[51]="clang/test/Sema/vector-ops.c:129:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
[52]="clang/test/Sema/vector-ops.c:130:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
[53]="clang/test/Sema/vector-ops.c:132:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
[54]="clang/test/Sema/vector-ops.c:133:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++"
}
}
},
},
["err_typecheck_lvalue_casts_not_supported"]={
["err_typecheck_lvalue_casts_not_supported"]={
Line 6,999: Line 8,513:
[f]="assignment to cast is illegal, lvalue casts are not supported",
[f]="assignment to cast is illegal, lvalue casts are not supported",
[g]=n,
[g]=n,
[b]="assignment to cast is illegal, lvalue casts are not supported",
[h]="assignment to cast is illegal, lvalue casts are not supported",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_member_reference_arrow"]={
["err_typecheck_member_reference_arrow"]={
Line 7,011: Line 8,528:
[f]="member reference type %0 is not a pointer",
[f]="member reference type %0 is not a pointer",
[g]=n,
[g]=n,
[b]="member reference type (.*?) is not a pointer",
[h]="member reference type (.*?) is not a pointer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{E,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();"},{I,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();"},{ab,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]={{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();"}},
[o]={
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"}
}
},
},
["err_typecheck_member_reference_ivar"]={
["err_typecheck_member_reference_ivar"]={
Line 7,023: Line 8,543:
[f]="%0 does not have a member named %1",
[f]="%0 does not have a member named %1",
[g]=n,
[g]=n,
[b]="(.*?) does not have a member named (.*?)",
[h]="(.*?) does not have a member named (.*?)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{I,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]={{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();"}},
[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\'"}
}
},
},
["err_typecheck_member_reference_ivar_suggest"]={
["err_typecheck_member_reference_ivar_suggest"]={
Line 7,035: Line 8,558:
[f]="%0 does not have a member named %1; did you mean %2?",
[f]="%0 does not have a member named %1; did you mean %2?",
[g]=n,
[g]=n,
[b]="(.*?) does not have a member named (.*?); did you mean (.*?)\\?",
[h]="(.*?) does not have a member named (.*?); did you mean (.*?)\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[k]={{I,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]={{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);"}},
[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\'?"}
}
},
},
["err_typecheck_member_reference_struct_union"]={
["err_typecheck_member_reference_struct_union"]={
Line 7,047: Line 8,573:
[f]="member reference base type %0 is not a structure or union",
[f]="member reference base type %0 is not a structure or union",
[g]=n,
[g]=n,
[b]="member reference base type (.*?) is not a structure or union",
[h]="member reference base type (.*?) is not a structure or union",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{I,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();"},{I,1691,"fail:\n  S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}}
[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;"}},
[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"}
}
},
},
["err_typecheck_member_reference_suggestion"]={
["err_typecheck_member_reference_suggestion"]={
Line 7,059: Line 8,588:
[f]="member reference type %0 is %select{a|not a}1 pointer; did you mean to use \'%select{->|.}1\'?",
[f]="member reference type %0 is %select{a|not a}1 pointer; did you mean to use \'%select{->|.}1\'?",
[g]=n,
[g]=n,
[b]="member reference type (.*?) is (?:a|not a) pointer; did you mean to use \'(?:\\-\\>|\\.)\'\\?",
[h]="member reference type (.*?) is (?:a|not a) pointer; did you mean to use \'(?:\\-\\>|\\.)\'\\?",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records."},
[c]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records."},
[k]={{E,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, \".\");"},{E,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, \".\");"},{E,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();"},{I,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, \".\");"},{I,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]={{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, \"->\");"}},
[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 \'.\'?"}
}
},
},
["err_typecheck_member_reference_type"]={
["err_typecheck_member_reference_type"]={
Line 7,071: Line 8,603:
[f]="cannot refer to type member %0 in %1 with \'%select{.|->}2\'",
[f]="cannot refer to type member %0 in %1 with \'%select{.|->}2\'",
[g]=n,
[g]=n,
[b]="cannot refer to type member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[h]="cannot refer to type member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{I,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]={{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);"}},
[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 \'->\'"}
}
},
},
["err_typecheck_member_reference_unknown"]={
["err_typecheck_member_reference_unknown"]={
Line 7,083: Line 8,618:
[f]="cannot refer to member %0 in %1 with \'%select{.|->}2\'",
[f]="cannot refer to member %0 in %1 with \'%select{.|->}2\'",
[g]=n,
[g]=n,
[b]="cannot refer to member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[h]="cannot refer to member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{I,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]={{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);"}}
},
},
["err_typecheck_missing_return_type_incompatible"]={
["err_typecheck_missing_return_type_incompatible"]={
Line 7,095: Line 8,630:
[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",
[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]=n,
[g]=n,
[b]="(?:return type (.*?) must match previous return type (.*?)|return type must match previous return type) when (?:block literal|lambda expression) has unspecified explicit return type",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is "},
[c]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is "},
[k]={{yb,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);"},{K,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]={{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*/;"}},
[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"}
}
},
},
["err_typecheck_negative_array_size"]={
["err_typecheck_negative_array_size"]={
Line 7,107: Line 8,645:
[f]="array size is negative",
[f]="array size is negative",
[g]=n,
[g]=n,
[b]="array size is negative",
[h]="array size is negative",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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);"},{t,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);"},{E,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());"},{F,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);"},{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();"}},
[o]={
[Db]={"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"]={
Line 7,119: Line 8,660:
[f]="non-object type %0 is not assignable",
[f]="non-object type %0 is not assignable",
[g]=n,
[g]=n,
[b]="non\\-object type (.*?) is not assignable",
[h]="non\\-object type (.*?) is not assignable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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;"}},
[o]={
["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"}
}
},
},
["err_typecheck_nonviable_condition"]={
["err_typecheck_nonviable_condition"]={
Line 7,131: Line 8,675:
[f]="no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0",
[f]="no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0",
[g]=n,
[g]=n,
[b]="no viable conversion(?:(?: from (.*?) to (.*?)|)|(?: from returned value of type (.*?) to function return type (.*?)|))",
[h]="no viable conversion(?:(?: from (.*?) to (.*?)|)|(?: from returned value of type (.*?) to function return type (.*?)|))",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "},
[c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "},
[k]={{D,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();"},{ab,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]={{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;"}},
[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\'"}
}
},
},
["err_typecheck_nonviable_condition_incomplete"]={
["err_typecheck_nonviable_condition_incomplete"]={
Line 7,143: Line 8,690:
[f]="no viable conversion%diff{ from $ to incomplete type $|}0,1",
[f]="no viable conversion%diff{ from $ to incomplete type $|}0,1",
[g]=n,
[g]=n,
[b]="no viable conversion(?: from (.*?) to incomplete type (.*?)|)",
[h]="no viable conversion(?: from (.*?) to incomplete type (.*?)|)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i..."},
[c]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i..."},
[k]={{D,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()))"},{ab,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]={{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()))"}},
[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\'"}
}
},
},
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
Line 7,155: Line 8,705:
[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",
[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]=n,
[g]=n,
[b]="(?: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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."},
[c]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."},
[k]={{p,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();"},{p,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*/"},{p,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]={{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 */"}},
[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"}
}
},
},
["err_typecheck_ordered_comparison_of_function_pointers"]={
["err_typecheck_ordered_comparison_of_function_pointers"]={
Line 7,167: Line 8,720:
[f]="ordered comparison of function pointers (%0 and %1)",
[f]="ordered comparison of function pointers (%0 and %1)",
[g]=n,
[g]=n,
[b]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
[h]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={pb,1615397021,ub},
[c]={yb,1615397021,zb},
[k]={{p,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]={{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;"}},
[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 (*)()\'))"}
}
},
},
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
Line 7,179: Line 8,735:
[f]="ordered comparison between pointer and zero (%0 and %1)",
[f]="ordered comparison between pointer and zero (%0 and %1)",
[g]=n,
[g]=n,
[b]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\)",
[h]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."},
[c]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."},
[k]={{p,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]={{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;"}},
[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 *\')"}
}
},
},
["err_typecheck_pointer_arith_function_type"]={
["err_typecheck_pointer_arith_function_type"]={
Line 7,191: Line 8,750:
[f]="arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2",
[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]=n,
[g]=n,
[b]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?))",
[h]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?))",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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 */"},{p,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]={{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 */"}},
[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 ()\'"}
}
},
},
["err_typecheck_pointer_arith_void_type"]={
["err_typecheck_pointer_arith_void_type"]={
Line 7,203: Line 8,765:
[f]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void",
[f]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void",
[g]=n,
[g]=n,
[b]="arithmetic on(?: a|) pointer(?:|s) to void",
[h]="arithmetic on(?: a|) pointer(?:|s) to void",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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(); }"},{p,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]={{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(); }"}},
[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"}
}
},
},
["err_typecheck_sclass_fscope"]={
["err_typecheck_sclass_fscope"]={
Line 7,215: Line 8,780:
[f]="illegal storage class on file-scoped variable",
[f]="illegal storage class on file-scoped variable",
[g]=n,
[g]=n,
[b]="illegal storage class on file\\-scoped variable",
[h]="illegal storage class on file\\-scoped variable",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:26:14: error: illegal storage class on file-scoped variable"}
}
},
},
["err_typecheck_sclass_func"]={
["err_typecheck_sclass_func"]={
Line 7,227: Line 8,795:
[f]="illegal storage class on function",
[f]="illegal storage class on function",
[g]=n,
[g]=n,
[b]="illegal storage class on function",
[h]="illegal storage class on function",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{t,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]={
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:59:3: error: illegal storage class on function"}
}
},
},
["err_typecheck_statement_requires_integer"]={
["err_typecheck_statement_requires_integer"]={
Line 7,239: Line 8,810:
[f]="statement requires expression of integer type (%0 invalid)",
[f]="statement requires expression of integer type (%0 invalid)",
[g]=n,
[g]=n,
[b]="statement requires expression of integer type \\((.*?) invalid\\)",
[h]="statement requires expression of integer type \\((.*?) invalid\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{K,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]={{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; }"}},
[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)"}
}
},
},
["err_typecheck_statement_requires_scalar"]={
["err_typecheck_statement_requires_scalar"]={
Line 7,251: Line 8,825:
[f]="statement requires expression of scalar type (%0 invalid)",
[f]="statement requires expression of scalar type (%0 invalid)",
[g]=n,
[g]=n,
[b]="statement requires expression of scalar type \\((.*?) invalid\\)",
[h]="statement requires expression of scalar type \\((.*?) invalid\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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();"}},
[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)"}
}
},
},
["err_typecheck_sub_ptr_compatible"]={
["err_typecheck_sub_ptr_compatible"]={
Line 7,263: Line 8,840:
[f]="%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1",
[f]="%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1",
[g]=n,
[g]=n,
[b]="(?:(.*?) and (.*?) are not pointers to compatible types|pointers to incompatible types)",
[h]="(?:(.*?) and (.*?) are not pointers to compatible types|pointers to incompatible types)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{v,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();"},{p,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();"},{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();"}},
[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"}
}
},
},
["err_typecheck_subscript_not_integer"]={
["err_typecheck_subscript_not_integer"]={
Line 7,275: Line 8,855:
[f]="array subscript is not an integer",
[f]="array subscript is not an integer",
[g]=n,
[g]=n,
[b]="array subscript is not an integer",
[h]="array subscript is not an integer",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"003af249275a",1240699855,"minor diagnostics improvements."},
[c]={"003af249275a",1240699855,"minor diagnostics improvements."},
[k]={{p,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());"},{p,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]={{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());"}},
[o]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"}
}
},
},
["err_typecheck_subscript_value"]={
["err_typecheck_subscript_value"]={
Line 7,287: Line 8,870:
[f]="subscripted value is not an array, pointer, or vector",
[f]="subscripted value is not an array, pointer, or vector",
[g]=n,
[g]=n,
[b]="subscripted value is not an array, pointer, or vector",
[h]="subscripted value is not an array, pointer, or vector",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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]={{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());"}},
[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"}
}
},
},
["err_typecheck_sve_rvv_ambiguous"]={
["err_typecheck_sve_rvv_ambiguous"]={
Line 7,299: Line 8,885:
[f]="cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[f]="cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[g]=n,
[g]=n,
[b]="cannot combine fixed\\-length and sizeless (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[h]="cannot combine fixed\\-length and sizeless (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{p,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]={{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;"}},
[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\'))"}
}
},
},
["err_typecheck_sve_rvv_gnu_ambiguous"]={
["err_typecheck_sve_rvv_gnu_ambiguous"]={
Line 7,311: Line 8,900:
[f]="cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[f]="cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[g]=n,
[g]=n,
[b]="cannot combine GNU and (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[h]="cannot combine GNU and (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{p,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]={{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;"}},
[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))"}
}
},
},
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
Line 7,323: Line 8,915:
[f]="three-way comparison between pointer and zero",
[f]="three-way comparison between pointer and zero",
[g]=n,
[g]=n,
[b]="three\\-way comparison between pointer and zero",
[h]="three\\-way comparison between pointer and zero",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{p,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]={{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());"}}
},
},
["err_typecheck_unary_expr"]={
["err_typecheck_unary_expr"]={
Line 7,335: Line 8,927:
[f]="invalid argument type %0 to unary expression",
[f]="invalid argument type %0 to unary expression",
[g]=n,
[g]=n,
[b]="invalid argument type (.*?) to unary expression",
[h]="invalid argument type (.*?) to unary expression",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{p,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());"},{p,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());"},{p,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());"},{p,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());"},{p,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());"},{p,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());"},{p,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());"},{p,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());"},{p,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]={{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());"}},
[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"}
}
},
},
["err_typecheck_vector_lengths_not_equal"]={
["err_typecheck_vector_lengths_not_equal"]={
Line 7,347: Line 8,942:
[f]="vector operands do not have the same number of elements (%0 and %1)",
[f]="vector operands do not have the same number of elements (%0 and %1)",
[g]=n,
[g]=n,
[b]="vector operands do not have the same number of elements \\((.*?) and (.*?)\\)",
[h]="vector operands do not have the same number of elements \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[k]={{p,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();"},{p,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();"},{p,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]={{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();"}},
[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))"}
}
},
},
["err_typecheck_vector_not_convertable"]={
["err_typecheck_vector_not_convertable"]={
Line 7,359: Line 8,957:
[f]="cannot convert between vector values of different size (%0 and %1)",
[f]="cannot convert between vector values of different size (%0 and %1)",
[g]=n,
[g]=n,
[b]="cannot convert between vector values of different size \\((.*?) and (.*?)\\)",
[h]="cannot convert between vector values of different size \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{p,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]={{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;"}},
[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\')"}
}
},
},
["err_typecheck_vector_not_convertable_implict_truncation"]={
["err_typecheck_vector_not_convertable_implict_truncation"]={
Line 7,371: Line 8,972:
[f]="cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation",
[f]="cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation",
[g]=n,
[g]=n,
[b]="cannot convert between (?:scalar|vector) type (.*?) and vector type (.*?) as implicit conversion would cause truncation",
[h]="cannot convert between (?:scalar|vector) type (.*?) and vector type (.*?) as implicit conversion would cause truncation",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[k]={{p,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;"},{p,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]={{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;"}},
[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"}
}
},
},
["err_typecheck_vector_not_convertable_non_scalar"]={
["err_typecheck_vector_not_convertable_non_scalar"]={
Line 7,383: Line 8,987:
[f]="cannot convert between vector and non-scalar values (%0 and %1)",
[f]="cannot convert between vector and non-scalar values (%0 and %1)",
[g]=n,
[g]=n,
[b]="cannot convert between vector and non\\-scalar values \\((.*?) and (.*?)\\)",
[h]="cannot convert between vector and non\\-scalar values \\((.*?) and (.*?)\\)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"},
[c]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"},
[k]={{p,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();"},{p,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]={{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();"}},
[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\')"}
}
},
},
["err_typecheck_wasm_table_must_have_zero_length"]={
["err_typecheck_wasm_table_must_have_zero_length"]={
Line 7,395: Line 9,002:
[f]="only zero-length WebAssembly tables are currently supported",
[f]="only zero-length WebAssembly tables are currently supported",
[g]=n,
[g]=n,
[b]="only zero\\-length WebAssembly tables are currently supported",
[h]="only zero\\-length WebAssembly tables are currently supported",
[h]=a,
[b]=a,
[j]=a,
[j]=a,
[c]={M,1625925174,L},
[c]={O,1625925174,L},
[k]={{t,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]={
["clang/test/Sema/wasm-refs-and-tables.c"]={"clang/test/Sema/wasm-refs-and-tables.c:15:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:16:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:17:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:24:22: error: only zero-length WebAssembly tables are currently supported"}
}
},
},
["err_typecheck_zero_array_size"]={
["err_typecheck_zero_array_size"]={
Line 7,407: Line 9,017:
[f]="zero-length arrays are not permitted in %select{C++|SYCL device code}0",
[f]="zero-length arrays are not permitted in %select{C++|SYCL device code}0",
[g]=n,
[g]=n,
[b]="zero\\-length arrays are not permitted in (?:C\\+\\+|SYCL device code)",
[h]="zero\\-length arrays are not permitted in (?:C\\+\\+|SYCL device code)",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,"},
[c]={"d5cb1ddb2cf4",1269744163,"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;"},{F,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;"},{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();"}},
[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"}
}
},
},
["err_typedef_changes_linkage"]={
["err_typedef_changes_linkage"]={
Line 7,419: Line 9,032:
[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",
[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]=n,
[g]=n,
[b]="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",
[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",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change"},
[c]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change"},
[k]={{t,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]={
["clang/test/SemaCXX/anonymous-struct.cpp"]={"clang/test/SemaCXX/anonymous-struct.cpp:115:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition","clang/test/SemaCXX/anonymous-struct.cpp:131:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}
}
},
},
["err_typedef_not_bitfield"]={
["err_typedef_not_bitfield"]={
Line 7,431: Line 9,047:
[f]="typedef member %0 cannot be a bit-field",
[f]="typedef member %0 cannot be a bit-field",
[g]=n,
[g]=n,
[b]="typedef member (.*?) cannot be a bit\\-field",
[h]="typedef member (.*?) cannot be a bit\\-field",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={r,1237025389,s},
[c]={t,1237025389,s},
[k]={{y,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]={{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();"}},
[o]={
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"}
}
},
},
["err_typedef_not_identifier"]={
["err_typedef_not_identifier"]={
Line 7,443: Line 9,062:
[f]="typedef name must be an identifier",
[f]="typedef name must be an identifier",
[g]=n,
[g]=n,
[b]="typedef name must be an identifier",
[h]="typedef name must be an identifier",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"},
[c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"},
[k]={{t,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]={
["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:54:15: error: typedef name must be an identifier"}
}
},
},
["err_typename_identifiers_only"]={
["err_typename_identifiers_only"]={
Line 7,455: Line 9,077:
[f]="typename is allowed for identifiers only",
[f]="typename is allowed for identifiers only",
[g]=n,
[g]=n,
[b]="typename is allowed for identifiers only",
[h]="typename is allowed for identifiers only",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,"},
[c]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,"},
[k]={{bb,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]={{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));"}},
[o]={
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"}
}
},
},
["err_typename_invalid_constexpr"]={
["err_typename_invalid_constexpr"]={
Line 7,467: Line 9,092:
[f]="type name does not allow %select{<ERROR>|constexpr|consteval|constinit}0 specifier to be specified",
[f]="type name does not allow %select{<ERROR>|constexpr|consteval|constinit}0 specifier to be specified",
[g]=n,
[g]=n,
[b]="type name does not allow (?:constexpr|consteval|constinit) specifier to be specified",
[h]="type name does not allow (?:constexpr|consteval|constinit) specifier to be specified",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"},
[c]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"},
[k]={{R,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]={{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());"}},
[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"}
}
},
},
["err_typename_invalid_functionspec"]={
["err_typename_invalid_functionspec"]={
Line 7,479: Line 9,107:
[f]="type name does not allow function specifier to be specified",
[f]="type name does not allow function specifier to be specified",
[g]=n,
[g]=n,
[b]="type name does not allow function specifier to be specified",
[h]="type name does not allow function specifier to be specified",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{R,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);"},{R,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);"},{R,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);"},{R,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]={{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);"}},
[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"}
}
},
},
["err_typename_invalid_storageclass"]={
["err_typename_invalid_storageclass"]={
Line 7,491: Line 9,122:
[f]="type name does not allow storage class to be specified",
[f]="type name does not allow storage class to be specified",
[g]=n,
[g]=n,
[b]="type name does not allow storage class to be specified",
[h]="type name does not allow storage class to be specified",
[h]=a,
[b]=a,
[j]=u,
[j]=v,
[c]={A,1236199783,z},
[c]={A,1236199783,B},
[k]={{R,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);"},{R,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]={{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);"}},
[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"}
}
},
},
["err_typename_missing"]={
["err_typename_missing"]={
Line 7,503: Line 9,137:
[f]="missing \'typename\' prior to dependent type name \'%0%1\'",
[f]="missing \'typename\' prior to dependent type name \'%0%1\'",
[g]=n,
[g]=n,
[b]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'",
[h]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'",
[h]=a,
[b]=a,
[j]=o,
[j]=p,
[c]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an"},
[c]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an"},
[k]={{t,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;"},{p,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;"},{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;"}},
[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\'"}
}
}
}
};
};
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