Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) (Created page with "local a=""; local b="regex2"; local c="commit"; local d="prefix"; local e="type"; local f="message"; local g="regex1"; local h="regex3"; local i="title"; local j="category"; local k="source"; local l="error: "; local m="Error"; local n="(?:error|fatal error)\\: "; local o="Semantic Issue"; local p="clang/lib/Sema/SemaExpr.cpp"; local q="clang/lib/Sema/SemaTemplate.cpp"; local r="5a8987ca5113"; local s="Update tablegen diagnostic files to be in sync with the def files.";...") |
Timo.stripf (talk | contribs) No edit summary |
||
Line 90: | Line 90: | ||
[j]=x, | [j]=x, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pp_invalid_directive"]={ | ["err_pp_invalid_directive"]={ | ||
Line 102: | Line 102: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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;"}} | ||
}, | }, | ||
["err_pp_invalid_poison"]={ | ["err_pp_invalid_poison"]={ | ||
Line 114: | Line 114: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{J, | [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);"}} | ||
}, | }, | ||
["err_pp_invalid_tok_in_arg_list"]={ | ["err_pp_invalid_tok_in_arg_list"]={ | ||
Line 126: | Line 126: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_invalid_udl"]={ | ["err_pp_invalid_udl"]={ | ||
Line 138: | Line 138: | ||
[j]=x, | [j]=x, | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_pp_line_digit_sequence"]={ | ["err_pp_line_digit_sequence"]={ | ||
Line 150: | Line 150: | ||
[j]=x, | [j]=x, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_pp_line_invalid_filename"]={ | ["err_pp_line_invalid_filename"]={ | ||
Line 162: | Line 162: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_line_requires_integer"]={ | ["err_pp_line_requires_integer"]={ | ||
Line 174: | Line 174: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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))"}} | ||
}, | }, | ||
["err_pp_linemarker_invalid_filename"]={ | ["err_pp_linemarker_invalid_filename"]={ | ||
Line 186: | Line 186: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_linemarker_invalid_flag"]={ | ["err_pp_linemarker_invalid_flag"]={ | ||
Line 198: | Line 198: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_linemarker_invalid_pop"]={ | ["err_pp_linemarker_invalid_pop"]={ | ||
Line 210: | Line 210: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_linemarker_requires_integer"]={ | ["err_pp_linemarker_requires_integer"]={ | ||
Line 222: | Line 222: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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))"}} | ||
}, | }, | ||
["err_pp_macro_not_identifier"]={ | ["err_pp_macro_not_identifier"]={ | ||
Line 234: | Line 234: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_malformed_ident"]={ | ["err_pp_malformed_ident"]={ | ||
Line 246: | Line 246: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_missing_lparen_in_vaopt_use"]={ | ["err_pp_missing_lparen_in_vaopt_use"]={ | ||
Line 258: | Line 258: | ||
[j]=x, | [j]=x, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pp_missing_macro_name"]={ | ["err_pp_missing_macro_name"]={ | ||
Line 270: | Line 270: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_missing_rparen_in_macro_def"]={ | ["err_pp_missing_rparen_in_macro_def"]={ | ||
Line 282: | Line 282: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_module_begin_no_module_map"]={ | ["err_pp_module_begin_no_module_map"]={ | ||
Line 294: | Line 294: | ||
[j]=x, | [j]=x, | ||
[c]={wb,1493857794,xb}, | [c]={wb,1493857794,xb}, | ||
[k]={{J, | [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;"}} | ||
}, | }, | ||
["err_pp_module_begin_no_submodule"]={ | ["err_pp_module_begin_no_submodule"]={ | ||
Line 306: | Line 306: | ||
[j]=x, | [j]=x, | ||
[c]={wb,1493857794,xb}, | [c]={wb,1493857794,xb}, | ||
[k]={{J, | [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;"}} | ||
}, | }, | ||
["err_pp_module_begin_without_module_end"]={ | ["err_pp_module_begin_without_module_end"]={ | ||
Line 318: | Line 318: | ||
[j]=x, | [j]=x, | ||
[c]={wb,1493857794,xb}, | [c]={wb,1493857794,xb}, | ||
[k]={{"clang/lib/Lex/PPLexerChange.cpp", | [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);"}} | ||
}, | }, | ||
["err_pp_module_begin_wrong_module"]={ | ["err_pp_module_begin_wrong_module"]={ | ||
Line 330: | Line 330: | ||
[j]=x, | [j]=x, | ||
[c]={wb,1493857794,xb}, | [c]={wb,1493857794,xb}, | ||
[k]={{J, | [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;"}} | ||
}, | }, | ||
["err_pp_module_build_missing_end"]={ | ["err_pp_module_build_missing_end"]={ | ||
Line 342: | Line 342: | ||
[j]=x, | [j]=x, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pp_module_end_without_module_begin"]={ | ["err_pp_module_end_without_module_begin"]={ | ||
Line 354: | Line 354: | ||
[j]=x, | [j]=x, | ||
[c]={wb,1493857794,xb}, | [c]={wb,1493857794,xb}, | ||
[k]={{J, | [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);"}} | ||
}, | }, | ||
["err_pp_nested_paren"]={ | ["err_pp_nested_paren"]={ | ||
Line 366: | Line 366: | ||
[j]=x, | [j]=x, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_pp_operator_used_as_macro_name"]={ | ["err_pp_operator_used_as_macro_name"]={ | ||
Line 378: | Line 378: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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();"}} | ||
}, | }, | ||
["err_pp_pragma_hdrstop_not_seen"]={ | ["err_pp_pragma_hdrstop_not_seen"]={ | ||
Line 390: | Line 390: | ||
[j]=x, | [j]=x, | ||
[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", | [k]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n else if (!PPOpts->PCHWithHdrStopCreate)\n Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}} | ||
}, | }, | ||
["err_pp_pragma_unsafe_buffer_usage_syntax"]={ | ["err_pp_pragma_unsafe_buffer_usage_syntax"]={ | ||
Line 402: | Line 402: | ||
[j]=x, | [j]=x, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{J, | [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);"}} | ||
}, | }, | ||
["err_pp_remainder_by_zero"]={ | ["err_pp_remainder_by_zero"]={ | ||
Line 414: | Line 414: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{"clang/lib/Lex/PPExpressions.cpp", | [k]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n while (true) {\n case tok::percent:\n if (RHS.Val != 0)\n else if (ValueLive) {\n PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}} | ||
}, | }, | ||
["err_pp_stringize_not_parameter"]={ | ["err_pp_stringize_not_parameter"]={ | ||
Line 426: | Line 426: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{C, | [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);"}} | ||
}, | }, | ||
["err_pp_through_header_not_found"]={ | ["err_pp_through_header_not_found"]={ | ||
Line 438: | Line 438: | ||
[j]=x, | [j]=x, | ||
[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", | [k]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n if (!PPOpts->PCHThroughHeader.empty()) {\n if (!File) {\n Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}} | ||
}, | }, | ||
["err_pp_through_header_not_seen"]={ | ["err_pp_through_header_not_seen"]={ | ||
Line 450: | Line 450: | ||
[j]=x, | [j]=x, | ||
[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", | [k]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}} | ||
}, | }, | ||
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={ | ["err_pp_unclosed_pragma_unsafe_buffer_usage"]={ | ||
Line 462: | Line 462: | ||
[j]=x, | [j]=x, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{"clang/lib/Lex/PPLexerChange.cpp", | [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);"}} | ||
}, | }, | ||
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={ | ["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={ | ||
Line 474: | Line 474: | ||
[j]=x, | [j]=x, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{J, | [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);"}} | ||
}, | }, | ||
["err_pp_unmatched_end_of_arc_cf_code_audited"]={ | ["err_pp_unmatched_end_of_arc_cf_code_audited"]={ | ||
Line 486: | Line 486: | ||
[j]=x, | [j]=x, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pp_unmatched_end_of_assume_nonnull"]={ | ["err_pp_unmatched_end_of_assume_nonnull"]={ | ||
Line 498: | Line 498: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pp_unterminated_conditional"]={ | ["err_pp_unterminated_conditional"]={ | ||
Line 510: | Line 510: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{"clang/lib/Lex/Lexer.cpp", | [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);"}} | ||
}, | }, | ||
["err_pp_used_poisoned_id"]={ | ["err_pp_used_poisoned_id"]={ | ||
Line 522: | Line 522: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{"clang/lib/Lex/Preprocessor.cpp", | [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);"}} | ||
}, | }, | ||
["err_pp_vaopt_nested_use"]={ | ["err_pp_vaopt_nested_use"]={ | ||
Line 534: | Line 534: | ||
[j]=x, | [j]=x, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pp_visibility_non_macro"]={ | ["err_pp_visibility_non_macro"]={ | ||
Line 546: | Line 546: | ||
[j]=x, | [j]=x, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_ppc_builtin_requires_abi"]={ | ["err_ppc_builtin_requires_abi"]={ | ||
Line 558: | Line 558: | ||
[j]=o, | [j]=o, | ||
[c]={tb,1616787805,sb}, | [c]={tb,1616787805,sb}, | ||
[k]={{v, | [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\";"}} | ||
}, | }, | ||
["err_ppc_invalid_test_data_class_type"]={ | ["err_ppc_invalid_test_data_class_type"]={ | ||
Line 570: | Line 570: | ||
[j]=o, | [j]=o, | ||
[c]={pb,1615397021,ub}, | [c]={pb,1615397021,ub}, | ||
[k]={{v, | [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);"}} | ||
}, | }, | ||
["err_ppc_invalid_use_mma_type"]={ | ["err_ppc_invalid_use_mma_type"]={ | ||
Line 582: | Line 582: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{v, | [k]={{v,4410,"#include \"clang/Basic/PPCTypes.def\"\n ) {\n Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}} | ||
}, | }, | ||
["err_pragma_alloc_text_c_linkage"]={ | ["err_pragma_alloc_text_c_linkage"]={ | ||
Line 594: | Line 594: | ||
[j]=o, | [j]=o, | ||
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_alloc_text_not_function"]={ | ["err_pragma_alloc_text_not_function"]={ | ||
Line 606: | Line 606: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_attr_attr_no_push"]={ | ["err_pragma_attr_attr_no_push"]={ | ||
Line 618: | Line 618: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_duplicate_subject"]={ | ["err_pragma_attribute_duplicate_subject"]={ | ||
Line 630: | Line 630: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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));"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_attribute"]={ | ["err_pragma_attribute_expected_attribute"]={ | ||
Line 642: | Line 642: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_attribute_name"]={ | ["err_pragma_attribute_expected_attribute_name"]={ | ||
Line 654: | Line 654: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_attribute_syntax"]={ | ["err_pragma_attribute_expected_attribute_syntax"]={ | ||
Line 666: | Line 666: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_period"]={ | ["err_pragma_attribute_expected_period"]={ | ||
Line 678: | Line 678: | ||
[j]=u, | [j]=u, | ||
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"}, | [c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_push_pop_paren"]={ | ["err_pragma_attribute_expected_push_pop_paren"]={ | ||
Line 690: | Line 690: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_subject_identifier"]={ | ["err_pragma_attribute_expected_subject_identifier"]={ | ||
Line 702: | Line 702: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_expected_subject_sub_identifier"]={ | ["err_pragma_attribute_expected_subject_sub_identifier"]={ | ||
Line 714: | Line 714: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_attribute_extra_tokens_after_attribute"]={ | ["err_pragma_attribute_extra_tokens_after_attribute"]={ | ||
Line 726: | Line 726: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_invalid_argument"]={ | ["err_pragma_attribute_invalid_argument"]={ | ||
Line 738: | Line 738: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_invalid_matchers"]={ | ["err_pragma_attribute_invalid_matchers"]={ | ||
Line 750: | Line 750: | ||
[j]=o, | [j]=o, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{B, | [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;"}} | ||
}, | }, | ||
["err_pragma_attribute_invalid_subject_set_specifier"]={ | ["err_pragma_attribute_invalid_subject_set_specifier"]={ | ||
Line 762: | Line 762: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={ | ["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={ | ||
Line 774: | Line 774: | ||
[j]=o, | [j]=o, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{B, | [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));"}} | ||
}, | }, | ||
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={ | ["err_pragma_attribute_matcher_subrule_contradicts_rule"]={ | ||
Line 786: | Line 786: | ||
[j]=o, | [j]=o, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{B, | [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));"}} | ||
}, | }, | ||
["err_pragma_attribute_namespace_on_attribute"]={ | ["err_pragma_attribute_namespace_on_attribute"]={ | ||
Line 798: | Line 798: | ||
[j]=u, | [j]=u, | ||
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"}, | [c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_attribute_no_pop_eof"]={ | ["err_pragma_attribute_no_pop_eof"]={ | ||
Line 810: | Line 810: | ||
[j]=o, | [j]=o, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{B, | [k]={{B,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}} | ||
}, | }, | ||
["err_pragma_attribute_stack_mismatch"]={ | ["err_pragma_attribute_stack_mismatch"]={ | ||
Line 822: | Line 822: | ||
[j]=o, | [j]=o, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{B, | [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;"}} | ||
}, | }, | ||
["err_pragma_attribute_unknown_subject_rule"]={ | ["err_pragma_attribute_unknown_subject_rule"]={ | ||
Line 834: | Line 834: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_attribute_unknown_subject_sub_rule"]={ | ["err_pragma_attribute_unknown_subject_sub_rule"]={ | ||
Line 846: | Line 846: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_attribute_unsupported_attribute"]={ | ["err_pragma_attribute_unsupported_attribute"]={ | ||
Line 858: | Line 858: | ||
[j]=u, | [j]=u, | ||
[c]={P,1492508507,N}, | [c]={P,1492508507,N}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_cannot_end_force_cuda_host_device"]={ | ["err_pragma_cannot_end_force_cuda_host_device"]={ | ||
Line 870: | Line 870: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_clang_section_expected_equal"]={ | ["err_pragma_clang_section_expected_equal"]={ | ||
Line 882: | Line 882: | ||
[j]=u, | [j]=u, | ||
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"}, | [c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_comment_malformed"]={ | ["err_pragma_comment_malformed"]={ | ||
Line 894: | Line 894: | ||
[j]=u, | [j]=u, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_comment_unknown_kind"]={ | ["err_pragma_comment_unknown_kind"]={ | ||
Line 906: | Line 906: | ||
[j]=u, | [j]=u, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_detect_mismatch_malformed"]={ | ["err_pragma_detect_mismatch_malformed"]={ | ||
Line 918: | Line 918: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_expected_clang_section_name"]={ | ["err_pragma_expected_clang_section_name"]={ | ||
Line 930: | Line 930: | ||
[j]=u, | [j]=u, | ||
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"}, | [c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"}, | ||
[k]={{w, | [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\";"}} | ||
}, | }, | ||
["err_pragma_expected_file_scope"]={ | ["err_pragma_expected_file_scope"]={ | ||
Line 942: | Line 942: | ||
[j]=o, | [j]=o, | ||
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[k]={{B, | [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\";"}} | ||
}, | }, | ||
["err_pragma_expected_integer"]={ | ["err_pragma_expected_integer"]={ | ||
Line 954: | Line 954: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{w, | [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\";"}} | ||
}, | }, | ||
["err_pragma_fc_except_requires_precise"]={ | ["err_pragma_fc_except_requires_precise"]={ | ||
Line 966: | Line 966: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_fc_noprecise_requires_noexcept"]={ | ["err_pragma_fc_noprecise_requires_noexcept"]={ | ||
Line 978: | Line 978: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_fc_noprecise_requires_nofenv"]={ | ["err_pragma_fc_noprecise_requires_nofenv"]={ | ||
Line 990: | Line 990: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_fc_pp_scope"]={ | ["err_pragma_fc_pp_scope"]={ | ||
Line 1,002: | Line 1,002: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_fenv_requires_precise"]={ | ["err_pragma_fenv_requires_precise"]={ | ||
Line 1,014: | Line 1,014: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_file_or_compound_scope"]={ | ["err_pragma_file_or_compound_scope"]={ | ||
Line 1,026: | Line 1,026: | ||
[j]=u, | [j]=u, | ||
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"}, | [c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"}, | ||
[k]={{mb, | [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\";"}} | ||
}, | }, | ||
["err_pragma_float_control_malformed"]={ | ["err_pragma_float_control_malformed"]={ | ||
Line 1,038: | Line 1,038: | ||
[j]=u, | [j]=u, | ||
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"}, | [c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"}, | ||
[k]={{w, | [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);"}} | ||
}, | }, | ||
["err_pragma_fp_invalid_argument"]={ | ["err_pragma_fp_invalid_argument"]={ | ||
Line 1,050: | Line 1,050: | ||
[j]=u, | [j]=u, | ||
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"}, | [c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_fp_invalid_option"]={ | ["err_pragma_fp_invalid_option"]={ | ||
Line 1,062: | Line 1,062: | ||
[j]=u, | [j]=u, | ||
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"}, | [c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_invalid_keyword"]={ | ["err_pragma_invalid_keyword"]={ | ||
Line 1,074: | Line 1,074: | ||
[j]=u, | [j]=u, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_pragma_loop_compatibility"]={ | ["err_pragma_loop_compatibility"]={ | ||
Line 1,086: | Line 1,086: | ||
[j]=o, | [j]=o, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_pragma_loop_invalid_argument_type"]={ | ["err_pragma_loop_invalid_argument_type"]={ | ||
Line 1,098: | Line 1,098: | ||
[j]=o, | [j]=o, | ||
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."}, | [c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_pragma_loop_invalid_argument_value"]={ | ["err_pragma_loop_invalid_argument_value"]={ | ||
Line 1,110: | Line 1,110: | ||
[j]=o, | [j]=o, | ||
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."}, | [c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_pragma_loop_invalid_option"]={ | ["err_pragma_loop_invalid_option"]={ | ||
Line 1,122: | Line 1,122: | ||
[j]=u, | [j]=u, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_pragma_loop_invalid_vectorize_option"]={ | ["err_pragma_loop_invalid_vectorize_option"]={ | ||
Line 1,134: | Line 1,134: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_loop_missing_argument"]={ | ["err_pragma_loop_missing_argument"]={ | ||
Line 1,146: | Line 1,146: | ||
[j]=u, | [j]=u, | ||
[c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"}, | [c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"}, | ||
[k]={{w, | [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;"}} | ||
}, | }, | ||
["err_pragma_loop_precedes_nonloop"]={ | ["err_pragma_loop_precedes_nonloop"]={ | ||
Line 1,158: | Line 1,158: | ||
[j]=o, | [j]=o, | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_pragma_message_malformed"]={ | ["err_pragma_message_malformed"]={ | ||
Line 1,170: | Line 1,170: | ||
[j]=x, | [j]=x, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_pragma_misplaced_in_decl"]={ | ["err_pragma_misplaced_in_decl"]={ | ||
Line 1,182: | Line 1,182: | ||
[j]=u, | [j]=u, | ||
[c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"}, | [c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"}, | ||
[k]={{R, | [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());"}} | ||
}, | }, | ||
["err_pragma_missing_argument"]={ | ["err_pragma_missing_argument"]={ | ||
Line 1,194: | Line 1,194: | ||
[j]=u, | [j]=u, | ||
[c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."}, | [c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."}, | ||
[k]={{w, | [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\";"}} | ||
}, | }, | ||
["err_pragma_optimize_extra_argument"]={ | ["err_pragma_optimize_extra_argument"]={ | ||
Line 1,206: | Line 1,206: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_optimize_invalid_argument"]={ | ["err_pragma_optimize_invalid_argument"]={ | ||
Line 1,218: | Line 1,218: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_options_align_mac68k_target_unsupported"]={ | ["err_pragma_options_align_mac68k_target_unsupported"]={ | ||
Line 1,230: | Line 1,230: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_pack_identifer_not_supported"]={ | ["err_pragma_pack_identifer_not_supported"]={ | ||
Line 1,242: | Line 1,242: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_pack_invalid_alignment"]={ | ["err_pragma_pack_invalid_alignment"]={ | ||
Line 1,254: | Line 1,254: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{B, | [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);"}} | ||
}, | }, | ||
["err_pragma_pipeline_invalid_keyword"]={ | ["err_pragma_pipeline_invalid_keyword"]={ | ||
Line 1,266: | Line 1,266: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_pointers_to_members_unknown_kind"]={ | ["err_pragma_pointers_to_members_unknown_kind"]={ | ||
Line 1,278: | Line 1,278: | ||
[j]=u, | [j]=u, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_pragma_pop_visibility_mismatch"]={ | ["err_pragma_pop_visibility_mismatch"]={ | ||
Line 1,290: | Line 1,290: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_pragma_push_pop_macro_malformed"]={ | ["err_pragma_push_pop_macro_malformed"]={ | ||
Line 1,302: | Line 1,302: | ||
[j]=x, | [j]=x, | ||
[c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"}, | [c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"}, | ||
[k]={{J, | [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);"}} | ||
}, | }, | ||
["err_pragma_push_visibility_mismatch"]={ | ["err_pragma_push_visibility_mismatch"]={ | ||
Line 1,314: | Line 1,314: | ||
[j]=o, | [j]=o, | ||
[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, | [k]={{B,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n if (StartsWithPragma && IsNamespaceEnd) {\n Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}} | ||
}, | }, | ||
["err_pragma_section_invalid_for_target"]={ | ["err_pragma_section_invalid_for_target"]={ | ||
Line 1,326: | Line 1,326: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{B, | [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));"}} | ||
}, | }, | ||
["err_preserve_enum_value_invalid"]={ | ["err_preserve_enum_value_invalid"]={ | ||
Line 1,338: | Line 1,338: | ||
[j]=a, | [j]=a, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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;"}} | ||
}, | }, | ||
["err_preserve_enum_value_not_const"]={ | ["err_preserve_enum_value_not_const"]={ | ||
Line 1,350: | Line 1,350: | ||
[j]=a, | [j]=a, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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;"}} | ||
}, | }, | ||
["err_preserve_field_info_not_const"]={ | ["err_preserve_field_info_not_const"]={ | ||
Line 1,362: | Line 1,362: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_preserve_field_info_not_field"]={ | ["err_preserve_field_info_not_field"]={ | ||
Line 1,374: | Line 1,374: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_preserve_type_info_invalid"]={ | ["err_preserve_type_info_invalid"]={ | ||
Line 1,386: | Line 1,386: | ||
[j]=a, | [j]=a, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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;"}} | ||
}, | }, | ||
["err_preserve_type_info_not_const"]={ | ["err_preserve_type_info_not_const"]={ | ||
Line 1,398: | Line 1,398: | ||
[j]=a, | [j]=a, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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;"}} | ||
}, | }, | ||
["err_private_ivar_access"]={ | ["err_private_ivar_access"]={ | ||
Line 1,410: | Line 1,410: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_private_module_fragment_expected_semi"]={ | ["err_private_module_fragment_expected_semi"]={ | ||
Line 1,422: | Line 1,422: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_private_module_fragment_not_module"]={ | ["err_private_module_fragment_not_module"]={ | ||
Line 1,434: | Line 1,434: | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_private_module_fragment_not_module_interface"]={ | ["err_private_module_fragment_not_module_interface"]={ | ||
Line 1,446: | Line 1,446: | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_private_module_fragment_redefined"]={ | ["err_private_module_fragment_redefined"]={ | ||
Line 1,458: | Line 1,458: | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_probability_not_constant_float"]={ | ["err_probability_not_constant_float"]={ | ||
Line 1,470: | Line 1,470: | ||
[j]=a, | [j]=a, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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();"}} | ||
}, | }, | ||
["err_probability_out_of_range"]={ | ["err_probability_out_of_range"]={ | ||
Line 1,482: | Line 1,482: | ||
[j]=a, | [j]=a, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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();"}} | ||
}, | }, | ||
["err_property_accessor_type"]={ | ["err_property_accessor_type"]={ | ||
Line 1,494: | Line 1,494: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{Q, | [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;"}} | ||
}, | }, | ||
["err_property_found_suggest"]={ | ["err_property_found_suggest"]={ | ||
Line 1,506: | Line 1,506: | ||
[j]=o, | [j]=o, | ||
[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, | [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, \".\");"}} | ||
}, | }, | ||
["err_property_function_in_objc_container"]={ | ["err_property_function_in_objc_container"]={ | ||
Line 1,518: | Line 1,518: | ||
[j]=o, | [j]=o, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_property_implemented"]={ | ["err_property_implemented"]={ | ||
Line 1,530: | Line 1,530: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{Q, | [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;"}} | ||
}, | }, | ||
["err_property_is_variably_modified"]={ | ["err_property_is_variably_modified"]={ | ||
Line 1,542: | Line 1,542: | ||
[j]=o, | [j]=o, | ||
[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", | [k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n if (DI->getType()->isVariablyModifiedType()) {\n SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}} | ||
}, | }, | ||
["err_property_ivar_type"]={ | ["err_property_ivar_type"]={ | ||
Line 1,554: | Line 1,554: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{Q, | [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;"}} | ||
}, | }, | ||
["err_property_method_unavailable"]={ | ["err_property_method_unavailable"]={ | ||
Line 1,566: | Line 1,566: | ||
[j]=o, | [j]=o, | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_property_not_as_forward_class"]={ | ["err_property_not_as_forward_class"]={ | ||
Line 1,578: | Line 1,578: | ||
[j]=o, | [j]=o, | ||
[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, | [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))"}} | ||
}, | }, | ||
["err_property_not_found"]={ | ["err_property_not_found"]={ | ||
Line 1,590: | Line 1,590: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{I, | [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));"}} | ||
}, | }, | ||
["err_property_not_found_forward_class"]={ | ["err_property_not_found_forward_class"]={ | ||
Line 1,602: | Line 1,602: | ||
[j]=o, | [j]=o, | ||
[c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"}, | [c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"}, | ||
[k]={{db, | [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))"}} | ||
}, | }, | ||
["err_property_not_found_suggest"]={ | ["err_property_not_found_suggest"]={ | ||
Line 1,614: | Line 1,614: | ||
[j]=o, | [j]=o, | ||
[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, | [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));"}} | ||
}, | }, | ||
["err_property_setter_ambiguous_use"]={ | ["err_property_setter_ambiguous_use"]={ | ||
Line 1,626: | Line 1,626: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp", | [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();"}} | ||
}, | }, | ||
["err_property_type"]={ | ["err_property_type"]={ | ||
Line 1,638: | Line 1,638: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{Q, | [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;"}} | ||
}, | }, | ||
["err_protected_ivar_access"]={ | ["err_protected_ivar_access"]={ | ||
Line 1,650: | Line 1,650: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{I, | [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();"}} | ||
}, | }, | ||
["err_protocol_has_circular_dependency"]={ | ["err_protocol_has_circular_dependency"]={ | ||
Line 1,662: | Line 1,662: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{Y, | [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);"}} | ||
}, | }, | ||
["err_protocol_property_mismatch"]={ | ["err_protocol_property_mismatch"]={ | ||
Line 1,674: | Line 1,674: | ||
[j]=o, | [j]=o, | ||
[c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"}, | [c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"}, | ||
[k]={{Q, | [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);"}} | ||
}, | }, | ||
["err_pseudo_dtor_base_not_scalar"]={ | ["err_pseudo_dtor_base_not_scalar"]={ | ||
Line 1,686: | Line 1,686: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_pseudo_dtor_call_with_args"]={ | ["err_pseudo_dtor_call_with_args"]={ | ||
Line 1,698: | Line 1,698: | ||
[j]=o, | [j]=o, | ||
[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, | [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()));"}} | ||
}, | }, | ||
["err_pseudo_dtor_destructor_non_type"]={ | ["err_pseudo_dtor_destructor_non_type"]={ | ||
Line 1,710: | Line 1,710: | ||
[j]=o, | [j]=o, | ||
[c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"}, | [c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"}, | ||
[k]={{E, | [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;"}} | ||
}, | }, | ||
["err_pseudo_dtor_type_mismatch"]={ | ["err_pseudo_dtor_type_mismatch"]={ | ||
Line 1,722: | Line 1,722: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_pure_friend"]={ | ["err_pure_friend"]={ | ||
Line 1,734: | Line 1,734: | ||
[j]=o, | [j]=o, | ||
[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, | [k]={{y,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n if (D->getFriendObjectKind())\n Diag(D->getLocation(), diag::err_pure_friend);"}} | ||
}, | }, | ||
["err_qualified_catch_declarator"]={ | ["err_qualified_catch_declarator"]={ | ||
Line 1,746: | Line 1,746: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{y, | [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();"}} | ||
}, | }, | ||
["err_qualified_friend_def"]={ | ["err_qualified_friend_def"]={ | ||
Line 1,758: | Line 1,758: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_qualified_friend_no_match"]={ | ["err_qualified_friend_no_match"]={ | ||
Line 1,770: | Line 1,770: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_qualified_function_typeid"]={ | ["err_qualified_function_typeid"]={ | ||
Line 1,782: | Line 1,782: | ||
[j]=o, | [j]=o, | ||
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."}, | [c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."}, | ||
[k]={{F, | [k]={{F,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}} | ||
}, | }, | ||
["err_qualified_member_nonclass"]={ | ["err_qualified_member_nonclass"]={ | ||
Line 1,794: | Line 1,794: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_qualified_member_of_unrelated"]={ | ["err_qualified_member_of_unrelated"]={ | ||
Line 1,806: | Line 1,806: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_qualified_objc_access"]={ | ["err_qualified_objc_access"]={ | ||
Line 1,818: | Line 1,818: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_qualified_objc_catch_parm"]={ | ["err_qualified_objc_catch_parm"]={ | ||
Line 1,830: | Line 1,830: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_qualified_param_declarator"]={ | ["err_qualified_param_declarator"]={ | ||
Line 1,842: | Line 1,842: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_qualified_typedef_declarator"]={ | ["err_qualified_typedef_declarator"]={ | ||
Line 1,854: | Line 1,854: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_range_on_array_parameter"]={ | ["err_range_on_array_parameter"]={ | ||
Line 1,866: | Line 1,866: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_raw_delim_too_long"]={ | ["err_raw_delim_too_long"]={ | ||
Line 1,878: | Line 1,878: | ||
[j]=x, | [j]=x, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_readonly_message_assignment"]={ | ["err_readonly_message_assignment"]={ | ||
Line 1,890: | Line 1,890: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_realimag_invalid_type"]={ | ["err_realimag_invalid_type"]={ | ||
Line 1,902: | Line 1,902: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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\");"}} | ||
}, | }, | ||
["err_record_with_pointers_kernel_param"]={ | ["err_record_with_pointers_kernel_param"]={ | ||
Line 1,914: | Line 1,914: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_recursive_default_argument"]={ | ["err_recursive_default_argument"]={ | ||
Line 1,926: | Line 1,926: | ||
[j]=o, | [j]=o, | ||
[c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"}, | [c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_recursive_superclass"]={ | ["err_recursive_superclass"]={ | ||
Line 1,938: | Line 1,938: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_redeclaration_different_type"]={ | ["err_redeclaration_different_type"]={ | ||
Line 1,950: | Line 1,950: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_redeclaration_non_exported"]={ | ["err_redeclaration_non_exported"]={ | ||
Line 1,962: | Line 1,962: | ||
[j]=o, | [j]=o, | ||
[c]={tb,1616787805,sb}, | [c]={tb,1616787805,sb}, | ||
[k]={{t, | [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;"}} | ||
}, | }, | ||
["err_redefinition"]={ | ["err_redefinition"]={ | ||
Line 1,974: | Line 1,974: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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;"}} | ||
}, | }, | ||
["err_redefinition_different_concept"]={ | ["err_redefinition_different_concept"]={ | ||
Line 1,986: | Line 1,986: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_redefinition_different_kind"]={ | ["err_redefinition_different_kind"]={ | ||
Line 1,998: | Line 1,998: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_redefinition_different_namespace_alias"]={ | ["err_redefinition_different_namespace_alias"]={ | ||
Line 2,010: | Line 2,010: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_redefinition_different_type"]={ | ["err_redefinition_different_type"]={ | ||
Line 2,022: | Line 2,022: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_redefinition_different_typedef"]={ | ["err_redefinition_different_typedef"]={ | ||
Line 2,034: | Line 2,034: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_redefinition_extern_inline"]={ | ["err_redefinition_extern_inline"]={ | ||
Line 2,046: | Line 2,046: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_redefinition_of_enumerator"]={ | ["err_redefinition_of_enumerator"]={ | ||
Line 2,058: | Line 2,058: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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;"}} | ||
}, | }, | ||
["err_redefinition_of_label"]={ | ["err_redefinition_of_label"]={ | ||
Line 2,070: | Line 2,070: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{K, | [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();"}} | ||
}, | }, | ||
["err_redefinition_variably_modified_typedef"]={ | ["err_redefinition_variably_modified_typedef"]={ | ||
Line 2,082: | Line 2,082: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_ref_array_type"]={ | ["err_ref_array_type"]={ | ||
Line 2,094: | Line 2,094: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_ref_bad_target"]={ | ["err_ref_bad_target"]={ | ||
Line 2,106: | Line 2,106: | ||
[j]=o, | [j]=o, | ||
[c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"}, | [c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"}, | ||
[k]={{"clang/lib/Sema/SemaCUDA.cpp", | [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;"}} | ||
}, | }, | ||
["err_ref_bad_target_global_initializer"]={ | ["err_ref_bad_target_global_initializer"]={ | ||
Line 2,118: | Line 2,118: | ||
[j]=o, | [j]=o, | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_ref_flexarray_type"]={ | ["err_ref_flexarray_type"]={ | ||
Line 2,130: | Line 2,130: | ||
[j]=o, | [j]=o, | ||
[c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "}, | [c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_ref_init_ambiguous"]={ | ["err_ref_init_ambiguous"]={ | ||
Line 2,142: | Line 2,142: | ||
[j]=o, | [j]=o, | ||
[c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."}, | [c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."}, | ||
[k]={{D, | [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);"}} | ||
}, | }, | ||
["err_ref_non_value"]={ | ["err_ref_non_value"]={ | ||
Line 2,154: | Line 2,154: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_ref_qualifier_comparison_operator"]={ | ["err_ref_qualifier_comparison_operator"]={ | ||
Line 2,166: | Line 2,166: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{y, | [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);"}} | ||
}, | }, | ||
["err_ref_qualifier_constructor"]={ | ["err_ref_qualifier_constructor"]={ | ||
Line 2,178: | Line 2,178: | ||
[j]=o, | [j]=o, | ||
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "}, | [c]={"db9d66424425",1296018118,"Rvalue references for *this: "}, | ||
[k]={{y, | [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());"}} | ||
}, | }, | ||
["err_ref_qualifier_destructor"]={ | ["err_ref_qualifier_destructor"]={ | ||
Line 2,190: | Line 2,190: | ||
[j]=o, | [j]=o, | ||
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "}, | [c]={"db9d66424425",1296018118,"Rvalue references for *this: "}, | ||
[k]={{y, | [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());"}} | ||
}, | }, | ||
["err_ref_qualifier_overload"]={ | ["err_ref_qualifier_overload"]={ | ||
Line 2,202: | Line 2,202: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_ref_vm_type"]={ | ["err_ref_vm_type"]={ | ||
Line 2,214: | Line 2,214: | ||
[j]=o, | [j]=o, | ||
[c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."}, | [c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_refactor_code_outside_of_function"]={ | ["err_refactor_code_outside_of_function"]={ | ||
Line 2,226: | Line 2,226: | ||
[j]=ib, | [j]=ib, | ||
[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", | [k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n // We would like to extract code out of functions/methods/blocks.\n // Prohibit extraction from things like global variable / field\n // initializers and other top-level expressions.\n if (!Code.isInFunctionLikeBodyOfCode())\n return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}} | ||
}, | }, | ||
["err_refactor_extract_prohibited_expression"]={ | ["err_refactor_extract_prohibited_expression"]={ | ||
Line 2,238: | Line 2,238: | ||
[j]=ib, | [j]=ib, | ||
[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", | [k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n if (Code.size() == 1) {\n // Property setters can\'t be extracted.\n if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n if (!PRE->isMessagingGetter())\n return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}} | ||
}, | }, | ||
["err_refactor_extract_simple_expression"]={ | ["err_refactor_extract_simple_expression"]={ | ||
Line 2,250: | Line 2,250: | ||
[j]=ib, | [j]=ib, | ||
[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", | [k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n if (Code.size() == 1) {\n // Avoid extraction of simple literals and references.\n if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}} | ||
}, | }, | ||
["err_refactor_no_selection"]={ | ["err_refactor_no_selection"]={ | ||
Line 2,262: | Line 2,262: | ||
[j]=ib, | [j]=ib, | ||
[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", | [k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n // When one of the requirements is not satisfied, invoke should return a\n // valid error.\n {\n EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}} | ||
}, | }, | ||
["err_refactor_selection_invalid_ast"]={ | ["err_refactor_selection_invalid_ast"]={ | ||
Line 2,274: | Line 2,274: | ||
[j]=ib, | [j]=ib, | ||
[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", | [k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n if (!Selection)\n return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n if (!CodeRange)\n return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}} | ||
}, | }, | ||
["err_refactor_selection_no_symbol"]={ | ["err_refactor_selection_no_symbol"]={ | ||
Line 2,286: | Line 2,286: | ||
[j]=ib, | [j]=ib, | ||
[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", | [k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n if (!ND)\n return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}} | ||
}, | }, | ||
["err_reference_bind_drops_quals"]={ | ["err_reference_bind_drops_quals"]={ | ||
Line 2,298: | Line 2,298: | ||
[j]=o, | [j]=o, | ||
[c]={Ab,1260399737,zb}, | [c]={Ab,1260399737,zb}, | ||
[k]={{D, | [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*/"}} | ||
}, | }, | ||
["err_reference_bind_failed"]={ | ["err_reference_bind_failed"]={ | ||
Line 2,310: | Line 2,310: | ||
[j]=o, | [j]=o, | ||
[c]={Ab,1260399737,zb}, | [c]={Ab,1260399737,zb}, | ||
[k]={{D, | [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();"}} | ||
}, | }, | ||
["err_reference_bind_init_list"]={ | ["err_reference_bind_init_list"]={ | ||
Line 2,322: | Line 2,322: | ||
[j]=o, | [j]=o, | ||
[c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."}, | [c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."}, | ||
[k]={{D, | [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();"}} | ||
}, | }, | ||
["err_reference_bind_temporary_addrspace"]={ | ["err_reference_bind_temporary_addrspace"]={ | ||
Line 2,334: | Line 2,334: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_reference_bind_to_bitfield"]={ | ["err_reference_bind_to_bitfield"]={ | ||
Line 2,346: | Line 2,346: | ||
[j]=o, | [j]=o, | ||
[c]={Ab,1260399737,zb}, | [c]={Ab,1260399737,zb}, | ||
[k]={{D, | [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();"}} | ||
}, | }, | ||
["err_reference_bind_to_matrix_element"]={ | ["err_reference_bind_to_matrix_element"]={ | ||
Line 2,358: | Line 2,358: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{D, | [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();"}} | ||
}, | }, | ||
["err_reference_bind_to_vector_element"]={ | ["err_reference_bind_to_vector_element"]={ | ||
Line 2,370: | Line 2,370: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_reference_capture_with_reference_default"]={ | ["err_reference_capture_with_reference_default"]={ | ||
Line 2,382: | Line 2,382: | ||
[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, | [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));"}} | ||
}, | }, | ||
["err_reference_has_multiple_inits"]={ | ["err_reference_has_multiple_inits"]={ | ||
Line 2,394: | Line 2,394: | ||
[j]=o, | [j]=o, | ||
[c]={Ab,1260399737,zb}, | [c]={Ab,1260399737,zb}, | ||
[k]={{D, | [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());"}} | ||
}, | }, | ||
["err_reference_pipe_type"]={ | ["err_reference_pipe_type"]={ | ||
Line 2,406: | Line 2,406: | ||
[j]=o, | [j]=o, | ||
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"}, | [c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_reference_to_function_with_unsatisfied_constraints"]={ | ["err_reference_to_function_with_unsatisfied_constraints"]={ | ||
Line 2,418: | Line 2,418: | ||
[j]=o, | [j]=o, | ||
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_reference_to_local_in_enclosing_context"]={ | ["err_reference_to_local_in_enclosing_context"]={ | ||
Line 2,430: | Line 2,430: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_reference_to_void"]={ | ["err_reference_to_void"]={ | ||
Line 2,442: | Line 2,442: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{F, | [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);"}} | ||
}, | }, | ||
["err_reference_var_requires_init"]={ | ["err_reference_var_requires_init"]={ | ||
Line 2,454: | Line 2,454: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{t, | [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());"}} | ||
}, | }, | ||
["err_reference_without_init"]={ | ["err_reference_without_init"]={ | ||
Line 2,466: | Line 2,466: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_regparm_mismatch"]={ | ["err_regparm_mismatch"]={ | ||
Line 2,478: | Line 2,478: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_relocatable_without_isysroot"]={ | ["err_relocatable_without_isysroot"]={ | ||
Line 2,490: | Line 2,490: | ||
[j]=a, | [j]=a, | ||
[c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."}, | [c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."}, | ||
[k]={{"clang/lib/Frontend/FrontendActions.cpp", | [k]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}} | ||
}, | }, | ||
["err_repeat_attribute"]={ | ["err_repeat_attribute"]={ | ||
Line 2,502: | Line 2,502: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_require_constant_init_failed"]={ | ["err_require_constant_init_failed"]={ | ||
Line 2,514: | Line 2,514: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_requires_clause_inside_parens"]={ | ["err_requires_clause_inside_parens"]={ | ||
Line 2,526: | Line 2,526: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{R, | [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);"}} | ||
}, | }, | ||
["err_requires_clause_must_appear_after_trailing_return"]={ | ["err_requires_clause_must_appear_after_trailing_return"]={ | ||
Line 2,538: | Line 2,538: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{bb, | [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;"}} | ||
}, | }, | ||
["err_requires_clause_on_declarator_not_declaring_a_function"]={ | ["err_requires_clause_on_declarator_not_declaring_a_function"]={ | ||
Line 2,550: | Line 2,550: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{R, | [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);"}} | ||
}, | }, | ||
["err_requires_expr_expected_type_constraint"]={ | ["err_requires_expr_expected_type_constraint"]={ | ||
Line 2,562: | Line 2,562: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{cb, | [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);"}} | ||
}, | }, | ||
["err_requires_expr_in_simple_requirement"]={ | ["err_requires_expr_in_simple_requirement"]={ | ||
Line 2,574: | Line 2,574: | ||
[j]=u, | [j]=u, | ||
[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, | [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\");"}} | ||
}, | }, | ||
["err_requires_expr_local_parameter_default_argument"]={ | ["err_requires_expr_local_parameter_default_argument"]={ | ||
Line 2,586: | Line 2,586: | ||
[j]=o, | [j]=o, | ||
[c]={kb,1576172311,lb}, | [c]={kb,1576172311,lb}, | ||
[k]={{E, | [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);"}} | ||
}, | }, | ||
["err_requires_expr_missing_arrow"]={ | ["err_requires_expr_missing_arrow"]={ | ||
Line 2,598: | Line 2,598: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{cb, | [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(), \"->\");"}} | ||
}, | }, | ||
["err_requires_expr_parameter_list_ellipsis"]={ | ["err_requires_expr_parameter_list_ellipsis"]={ | ||
Line 2,610: | Line 2,610: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{cb, | [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);"}} | ||
}, | }, | ||
["err_requires_expr_parameter_referenced_in_evaluated_context"]={ | ["err_requires_expr_parameter_referenced_in_evaluated_context"]={ | ||
Line 2,622: | Line 2,622: | ||
[j]=o, | [j]=o, | ||
[c]={kb,1576172311,lb}, | [c]={kb,1576172311,lb}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_requires_expr_simple_requirement_noexcept"]={ | ["err_requires_expr_simple_requirement_noexcept"]={ | ||
Line 2,634: | Line 2,634: | ||
[j]=u, | [j]=u, | ||
[c]={fb,1570627358,gb}, | [c]={fb,1570627358,gb}, | ||
[k]={{cb, | [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(), \"}\");"}} | ||
}, | }, | ||
["err_restricted_superclass_mismatch"]={ | ["err_restricted_superclass_mismatch"]={ | ||
Line 2,646: | Line 2,646: | ||
[j]=o, | [j]=o, | ||
[c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"}, | [c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"}, | ||
[k]={{Y, | [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);"}} | ||
}, | }, | ||
["err_ret_local_block"]={ | ["err_ret_local_block"]={ | ||
Line 2,658: | Line 2,658: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{D, | [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;"}} | ||
}, | }, | ||
["err_rethrow_used_outside_catch"]={ | ["err_rethrow_used_outside_catch"]={ | ||
Line 2,670: | Line 2,670: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{K, | [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));"}} | ||
}, | }, | ||
["err_return_block_has_expr"]={ | ["err_return_block_has_expr"]={ | ||
Line 2,682: | Line 2,682: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{K, | [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);"}} | ||
}, | }, | ||
["err_return_in_captured_stmt"]={ | ["err_return_in_captured_stmt"]={ | ||
Line 2,694: | Line 2,694: | ||
[j]=o, | [j]=o, | ||
[c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"}, | [c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"}, | ||
[k]={{K, | [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();"}} | ||
}, | }, | ||
["err_return_in_constructor_handler"]={ | ["err_return_in_constructor_handler"]={ | ||
Line 2,706: | Line 2,706: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_return_in_coroutine"]={ | ["err_return_in_coroutine"]={ | ||
Line 2,718: | Line 2,718: | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_return_init_list"]={ | ["err_return_init_list"]={ | ||
Line 2,730: | Line 2,730: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_return_value_with_address_space"]={ | ["err_return_value_with_address_space"]={ | ||
Line 2,742: | Line 2,742: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_right_angle_bracket_equal_needs_space"]={ | ["err_right_angle_bracket_equal_needs_space"]={ | ||
Line 2,754: | Line 2,754: | ||
[j]=u, | [j]=u, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_riscv_builtin_invalid_lmul"]={ | ["err_riscv_builtin_invalid_lmul"]={ | ||
Line 2,766: | Line 2,766: | ||
[j]=a, | [j]=a, | ||
[c]={pb,1615397021,ub}, | [c]={pb,1615397021,ub}, | ||
[k]={{v, | [k]={{v,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}} | ||
}, | }, | ||
["err_riscv_builtin_requires_extension"]={ | ["err_riscv_builtin_requires_extension"]={ | ||
Line 2,778: | Line 2,778: | ||
[j]=a, | [j]=a, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{v, | [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\";"}} | ||
}, | }, | ||
["err_riscv_type_requires_extension"]={ | ["err_riscv_type_requires_extension"]={ | ||
Line 2,790: | Line 2,790: | ||
[j]=a, | [j]=a, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{v, | [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\";"}} | ||
}, | }, | ||
["err_root_class_cannot_use_super"]={ | ["err_root_class_cannot_use_super"]={ | ||
Line 2,802: | Line 2,802: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{db, | [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();"}} | ||
}, | }, | ||
["err_roptr_cannot_build_shared"]={ | ["err_roptr_cannot_build_shared"]={ | ||
Line 2,814: | Line 2,814: | ||
[j]=a, | [j]=a, | ||
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"}, | [c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"}, | ||
[k]={{"clang/lib/Driver/ToolChains/AIX.cpp", | [k]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n if (Args.hasArg(options::OPT_shared))\n D.Diag(diag::err_roptr_cannot_build_shared);"}} | ||
}, | }, | ||
["err_roptr_requires_data_sections"]={ | ["err_roptr_requires_data_sections"]={ | ||
Line 2,826: | Line 2,826: | ||
[j]=a, | [j]=a, | ||
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"}, | [c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"}, | ||
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp", | [k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n if (HasRoptr) {\n // The data sections option is on by default on AIX. We only need to error\n // out when -fno-data-sections is specified explicitly to turn off data\n // sections.\n if (DataSectionsTurnedOff)\n D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n // Since the storage mapping class is specified per csect,\n // without using data sections, it is less effective to use read-only\n // pointers. Using read-only pointers may cause other RO variables in the\n // same csect to become RW when the linker acts upon `-bforceimprw`;\n // therefore, we require that separate data sections\n // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n // data-sections since we have not found reasons to do otherwise that\n // overcome the user surprise of not respecting the setting.\n if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n Diags.Report(diag::err_roptr_requires_data_sections);"}} | ||
}, | }, | ||
["err_rotation_argument_to_cadd"]={ | ["err_rotation_argument_to_cadd"]={ | ||
Line 2,838: | Line 2,838: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{v, | [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))"}} | ||
}, | }, | ||
["err_rotation_argument_to_cmla"]={ | ["err_rotation_argument_to_cmla"]={ | ||
Line 2,850: | Line 2,850: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{v, | [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))"}} | ||
}, | }, | ||
["err_rref_in_exception_spec"]={ | ["err_rref_in_exception_spec"]={ | ||
Line 2,862: | Line 2,862: | ||
[j]=o, | [j]=o, | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_sampler_argument_required"]={ | ["err_sampler_argument_required"]={ | ||
Line 2,874: | Line 2,874: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_sampler_initializer_not_integer"]={ | ["err_sampler_initializer_not_integer"]={ | ||
Line 2,886: | Line 2,886: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_scoped_enum_missing_identifier"]={ | ["err_scoped_enum_missing_identifier"]={ | ||
Line 2,898: | Line 2,898: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_second_argument_to_cwsc_not_pointer"]={ | ["err_second_argument_to_cwsc_not_pointer"]={ | ||
Line 2,910: | Line 2,910: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_second_parameter_to_va_arg_abstract"]={ | ["err_second_parameter_to_va_arg_abstract"]={ | ||
Line 2,922: | Line 2,922: | ||
[j]=o, | [j]=o, | ||
[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, | [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()))"}} | ||
}, | }, | ||
["err_second_parameter_to_va_arg_incomplete"]={ | ["err_second_parameter_to_va_arg_incomplete"]={ | ||
Line 2,934: | Line 2,934: | ||
[j]=o, | [j]=o, | ||
[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, | [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()))"}} | ||
}, | }, | ||
["err_section_conflict"]={ | ["err_section_conflict"]={ | ||
Line 2,946: | Line 2,946: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_seh___except_block"]={ | ["err_seh___except_block"]={ | ||
Line 2,958: | Line 2,958: | ||
[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, | [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))"}} | ||
}, | }, | ||
["err_seh___except_filter"]={ | ["err_seh___except_filter"]={ | ||
Line 2,970: | Line 2,970: | ||
[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, | [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))"}} | ||
}, | }, | ||
["err_seh___finally_block"]={ | ["err_seh___finally_block"]={ | ||
Line 2,982: | Line 2,982: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_seh_expected_handler"]={ | ["err_seh_expected_handler"]={ | ||
Line 2,994: | Line 2,994: | ||
[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, | [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));"}} | ||
}, | }, | ||
["err_seh_in_a_coroutine_with_cxx_exceptions"]={ | ["err_seh_in_a_coroutine_with_cxx_exceptions"]={ | ||
Line 3,006: | Line 3,006: | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_seh_try_outside_functions"]={ | ["err_seh_try_outside_functions"]={ | ||
Line 3,018: | Line 3,018: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_seh_try_unsupported"]={ | ["err_seh_try_unsupported"]={ | ||
Line 3,030: | Line 3,030: | ||
[j]=o, | [j]=o, | ||
[c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"}, | [c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"}, | ||
[k]={{K, | [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);"}} | ||
}, | }, | ||
["err_selected_explicit_constructor"]={ | ["err_selected_explicit_constructor"]={ | ||
Line 3,042: | Line 3,042: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_selector_element_const_type"]={ | ["err_selector_element_const_type"]={ | ||
Line 3,054: | Line 3,054: | ||
[j]=o, | [j]=o, | ||
[c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"}, | [c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"}, | ||
[k]={{K, | [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();"}} | ||
}, | }, | ||
["err_selector_element_not_lvalue"]={ | ["err_selector_element_not_lvalue"]={ | ||
Line 3,066: | Line 3,066: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{K, | [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());"}} | ||
}, | }, | ||
["err_selector_element_type"]={ | ["err_selector_element_type"]={ | ||
Line 3,078: | Line 3,078: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{K, | [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());"}} | ||
}, | }, | ||
["err_setter_type_void"]={ | ["err_setter_type_void"]={ | ||
Line 3,090: | Line 3,090: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{Q, | [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);"}} | ||
}, | }, | ||
["err_setting_eval_method_used_in_unsafe_context"]={ | ["err_setting_eval_method_used_in_unsafe_context"]={ | ||
Line 3,102: | Line 3,102: | ||
[j]=o, | [j]=o, | ||
[c]={qb,1620118562,vb}, | [c]={qb,1620118562,vb}, | ||
[k]={{B, | [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;"}} | ||
}, | }, | ||
["err_shared_var_init"]={ | ["err_shared_var_init"]={ | ||
Line 3,114: | Line 3,114: | ||
[j]=o, | [j]=o, | ||
[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", | [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();"}} | ||
}, | }, | ||
["err_shift_rhs_only_vector"]={ | ["err_shift_rhs_only_vector"]={ | ||
Line 3,126: | Line 3,126: | ||
[j]=o, | [j]=o, | ||
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"}, | [c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_shufflevector_argument_too_large"]={ | ["err_shufflevector_argument_too_large"]={ | ||
Line 3,138: | Line 3,138: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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());"}} | ||
}, | }, | ||
["err_shufflevector_nonconstant_argument"]={ | ["err_shufflevector_nonconstant_argument"]={ | ||
Line 3,150: | Line 3,150: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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());"}} | ||
}, | }, | ||
["err_single_decl_assign_in_for_range"]={ | ["err_single_decl_assign_in_for_range"]={ | ||
Line 3,162: | Line 3,162: | ||
[j]=u, | [j]=u, | ||
[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, | [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, \":\");"}} | ||
}, | }, | ||
["err_size_t_literal_too_large"]={ | ["err_size_t_literal_too_large"]={ | ||
Line 3,174: | Line 3,174: | ||
[j]=a, | [j]=a, | ||
[c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"}, | [c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_sizeless_in_exception_spec"]={ | ["err_sizeless_in_exception_spec"]={ | ||
Line 3,186: | Line 3,186: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp", | [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;"}} | ||
}, | }, | ||
["err_sizeless_nonlocal"]={ | ["err_sizeless_nonlocal"]={ | ||
Line 3,198: | Line 3,198: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{t, | [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;"}} | ||
}, | }, | ||
["err_sizeof_alignof_function_type"]={ | ["err_sizeof_alignof_function_type"]={ | ||
Line 3,210: | Line 3,210: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_sizeof_alignof_incomplete_or_sizeless_type"]={ | ["err_sizeof_alignof_incomplete_or_sizeless_type"]={ | ||
Line 3,222: | Line 3,222: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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))"}} | ||
}, | }, | ||
["err_sizeof_alignof_typeof_bitfield"]={ | ["err_sizeof_alignof_typeof_bitfield"]={ | ||
Line 3,234: | Line 3,234: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_sizeof_nonfragile_interface"]={ | ["err_sizeof_nonfragile_interface"]={ | ||
Line 3,246: | Line 3,246: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_sizeof_pack_no_pack_name"]={ | ["err_sizeof_pack_no_pack_name"]={ | ||
Line 3,258: | Line 3,258: | ||
[j]=o, | [j]=o, | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_sizeof_pack_no_pack_name_suggest"]={ | ["err_sizeof_pack_no_pack_name_suggest"]={ | ||
Line 3,270: | Line 3,270: | ||
[j]=o, | [j]=o, | ||
[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", | [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));"}} | ||
}, | }, | ||
["err_sizeof_parameter_pack"]={ | ["err_sizeof_parameter_pack"]={ | ||
Line 3,282: | Line 3,282: | ||
[j]=u, | [j]=u, | ||
[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", | [k]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n/// unary-expression: [C99 6.5.3]\n/// \'sizeof\' unary-expression\n/// \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU] \'__alignof\' unary-expression\n/// [GNU] \'__alignof\' \'(\' type-name \')\'\n/// [C11] \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n if (Tok.is(tok::l_paren)) {\n } else if (Tok.is(tok::identifier)) {\n } else {\n Diag(Tok, diag::err_sizeof_parameter_pack);"}} | ||
}, | }, | ||
["err_sls_hardening_arm_not_supported"]={ | ["err_sls_hardening_arm_not_supported"]={ | ||
Line 3,294: | Line 3,294: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_spaceship_argument_narrowing"]={ | ["err_spaceship_argument_narrowing"]={ | ||
Line 3,306: | Line 3,306: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_spec_member_not_instantiated"]={ | ["err_spec_member_not_instantiated"]={ | ||
Line 3,318: | Line 3,318: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_specialization_after_instantiation"]={ | ["err_specialization_after_instantiation"]={ | ||
Line 3,330: | Line 3,330: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_specialization_not_primary_template"]={ | ["err_specialization_not_primary_template"]={ | ||
Line 3,342: | Line 3,342: | ||
[j]=o, | [j]=o, | ||
[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", | [k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n/// enum Kind {\n/// KnownValue = sizeof(T)\n/// };\n///\n/// bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n while (!DC->isFileContext()) {\n // Move to the outer template scope.\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n if (Guide && Guide->isImplicit()) {\n // Check that this template-id names the primary template and not a\n // partial or explicit specialization. (In the latter cases, it\'s\n // meaningless to attempt to find an instantiation of D within the\n // specialization.)\n // FIXME: The standard doesn\'t say what should happen here.\n if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}} | ||
}, | }, | ||
["err_specialize_member_of_template"]={ | ["err_specialize_member_of_template"]={ | ||
Line 3,354: | Line 3,354: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_stack_tagging_requires_hardware_feature"]={ | ["err_stack_tagging_requires_hardware_feature"]={ | ||
Line 3,366: | Line 3,366: | ||
[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"}, | ||
[k]={{"clang/lib/Driver/SanitizerArgs.cpp", | [k]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}} | ||
}, | }, | ||
["err_standalone_class_nested_name_specifier"]={ | ["err_standalone_class_nested_name_specifier"]={ | ||
Line 3,378: | Line 3,378: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_static_assert_expression_is_not_constant"]={ | ["err_static_assert_expression_is_not_constant"]={ | ||
Line 3,390: | Line 3,390: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{y, | [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())"}} | ||
}, | }, | ||
["err_static_assert_failed"]={ | ["err_static_assert_failed"]={ | ||
Line 3,402: | Line 3,402: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{y, | [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();"}} | ||
}, | }, | ||
["err_static_assert_invalid_mem_fn_ret_ty"]={ | ["err_static_assert_invalid_mem_fn_ret_ty"]={ | ||
Line 3,414: | Line 3,414: | ||
[j]=o, | [j]=o, | ||
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | ||
[k]={{y, | [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;"}} | ||
}, | }, | ||
["err_static_assert_invalid_message"]={ | ["err_static_assert_invalid_message"]={ | ||
Line 3,426: | Line 3,426: | ||
[j]=o, | [j]=o, | ||
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | ||
[k]={{y, | [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);"}} | ||
}, | }, | ||
["err_static_assert_message_constexpr"]={ | ["err_static_assert_message_constexpr"]={ | ||
Line 3,438: | Line 3,438: | ||
[j]=o, | [j]=o, | ||
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | ||
[k]={{y, | [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);"}} | ||
}, | }, | ||
["err_static_assert_missing_member_function"]={ | ["err_static_assert_missing_member_function"]={ | ||
Line 3,450: | Line 3,450: | ||
[j]=o, | [j]=o, | ||
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | ||
[k]={{y, | [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);"}} | ||
}, | }, | ||
["err_static_assert_requirement_failed"]={ | ["err_static_assert_requirement_failed"]={ | ||
Line 3,462: | Line 3,462: | ||
[j]=o, | [j]=o, | ||
[c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."}, | [c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."}, | ||
[k]={{y, | [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();"}} | ||
}, | }, | ||
["err_static_block_func"]={ | ["err_static_block_func"]={ | ||
Line 3,474: | Line 3,474: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_static_data_member_not_allowed_in_anon_struct"]={ | ["err_static_data_member_not_allowed_in_anon_struct"]={ | ||
Line 3,486: | Line 3,486: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_static_data_member_not_allowed_in_local_class"]={ | ["err_static_data_member_not_allowed_in_local_class"]={ | ||
Line 3,498: | Line 3,498: | ||
[j]=o, | [j]=o, | ||
[c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."}, | [c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_static_data_member_reinitialization"]={ | ["err_static_data_member_reinitialization"]={ | ||
Line 3,510: | Line 3,510: | ||
[j]=o, | [j]=o, | ||
[c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"}, | [c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_static_downcast_via_virtual"]={ | ["err_static_downcast_via_virtual"]={ | ||
Line 3,522: | Line 3,522: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{eb, | [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;"}} | ||
}, | }, | ||
["err_static_function_scope"]={ | ["err_static_function_scope"]={ | ||
Line 3,534: | Line 3,534: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_static_illegal_in_new"]={ | ["err_static_illegal_in_new"]={ | ||
Line 3,546: | Line 3,546: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{E, | [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());"}} | ||
}, | }, | ||
["err_static_kernel"]={ | ["err_static_kernel"]={ | ||
Line 3,558: | Line 3,558: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_static_lambda"]={ | ["err_static_lambda"]={ | ||
Line 3,572: | Line 3,572: | ||
[j]=u, | [j]=u, | ||
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"}, | [c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"}, | ||
[k]={{cb, | [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);"}} | ||
}, | }, | ||
["err_static_lambda_captures"]={ | ["err_static_lambda_captures"]={ | ||
Line 3,584: | Line 3,584: | ||
[j]=u, | [j]=u, | ||
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"}, | [c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"}, | ||
[k]={{cb, | [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);"}} | ||
}, | }, | ||
["err_static_main"]={ | ["err_static_main"]={ | ||
Line 3,596: | Line 3,596: | ||
[j]=o, | [j]=o, | ||
[c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."}, | [c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."}, | ||
[k]={{t, | [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());"}} | ||
}, | }, | ||
["err_static_mutable_lambda"]={ | ["err_static_mutable_lambda"]={ | ||
Line 3,608: | Line 3,608: | ||
[j]=u, | [j]=u, | ||
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"}, | [c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"}, | ||
[k]={{cb, | [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);"}} | ||
}, | }, | ||
["err_static_non_static"]={ | ["err_static_non_static"]={ | ||
Line 3,620: | Line 3,620: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_static_not_bitfield"]={ | ["err_static_not_bitfield"]={ | ||
Line 3,632: | Line 3,632: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{y, | [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();"}} | ||
}, | }, | ||
["err_static_out_of_line"]={ | ["err_static_out_of_line"]={ | ||
Line 3,644: | Line 3,644: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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());"}} | ||
}, | }, | ||
["err_static_overrides_virtual"]={ | ["err_static_overrides_virtual"]={ | ||
Line 3,656: | Line 3,656: | ||
[j]=o, | [j]=o, | ||
[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, | [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; }))"}} | ||
}, | }, | ||
["err_statically_allocated_object"]={ | ["err_statically_allocated_object"]={ | ||
Line 3,668: | Line 3,668: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{t, | [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, \"*\");"}} | ||
}, | }, | ||
["err_std_compare_type_not_supported"]={ | ["err_std_compare_type_not_supported"]={ | ||
Line 3,680: | Line 3,680: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_std_source_location_impl_malformed"]={ | ["err_std_source_location_impl_malformed"]={ | ||
Line 3,692: | Line 3,692: | ||
[j]=a, | [j]=a, | ||
[c]={qb,1620118562,vb}, | [c]={qb,1620118562,vb}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_std_source_location_impl_not_found"]={ | ["err_std_source_location_impl_not_found"]={ | ||
Line 3,704: | Line 3,704: | ||
[j]=a, | [j]=a, | ||
[c]={qb,1620118562,vb}, | [c]={qb,1620118562,vb}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_std_type_trait_not_class_template"]={ | ["err_std_type_trait_not_class_template"]={ | ||
Line 3,716: | Line 3,716: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_stmt_expr_in_default_arg"]={ | ["err_stmt_expr_in_default_arg"]={ | ||
Line 3,728: | Line 3,728: | ||
[j]=o, | [j]=o, | ||
[c]={qb,1620118562,vb}, | [c]={qb,1620118562,vb}, | ||
[k]={{R, | [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;"}} | ||
}, | }, | ||
["err_stmtexpr_file_scope"]={ | ["err_stmtexpr_file_scope"]={ | ||
Line 3,740: | Line 3,740: | ||
[j]=u, | [j]=u, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{"clang/lib/Parse/ParseExpr.cpp", | [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));"}} | ||
}, | }, | ||
["err_storage_class_for_static_member"]={ | ["err_storage_class_for_static_member"]={ | ||
Line 3,752: | Line 3,752: | ||
[j]=o, | [j]=o, | ||
[c]={"45f96f87c3cf",1371649314,"Fix pr16354."}, | [c]={"45f96f87c3cf",1371649314,"Fix pr16354."}, | ||
[k]={{t, | [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());"}} | ||
}, | }, | ||
["err_storage_spec_on_catch_parm"]={ | ["err_storage_spec_on_catch_parm"]={ | ||
Line 3,764: | Line 3,764: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_storageclass_invalid_for_member"]={ | ["err_storageclass_invalid_for_member"]={ | ||
Line 3,776: | Line 3,776: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{y, | [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);"}} | ||
}, | }, | ||
["err_store_value_to_reg"]={ | ["err_store_value_to_reg"]={ | ||
Line 3,788: | Line 3,788: | ||
[j]="Inline Assembly Issue", | [j]="Inline Assembly Issue", | ||
[c]={qb,1620118562,vb}, | [c]={qb,1620118562,vb}, | ||
[k]={{"clang/lib/CodeGen/CGStmt.cpp", | [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);"}} | ||
}, | }, | ||
["err_string_concat_mixed_suffix"]={ | ["err_string_concat_mixed_suffix"]={ | ||
Line 3,800: | Line 3,800: | ||
[j]=x, | [j]=x, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_strong_property"]={ | ["err_strong_property"]={ | ||
Line 3,812: | Line 3,812: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{Q, | [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();"}} | ||
}, | }, | ||
["err_subscript_function_type"]={ | ["err_subscript_function_type"]={ | ||
Line 3,824: | Line 3,824: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_subscript_incomplete_or_sizeless_type"]={ | ["err_subscript_incomplete_or_sizeless_type"]={ | ||
Line 3,836: | Line 3,836: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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))"}} | ||
}, | }, | ||
["err_subscript_nonfragile_interface"]={ | ["err_subscript_nonfragile_interface"]={ | ||
Line 3,848: | Line 3,848: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_subscript_svbool_t"]={ | ["err_subscript_svbool_t"]={ | ||
Line 3,860: | Line 3,860: | ||
[j]=o, | [j]=o, | ||
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_super_in_lambda_unsupported"]={ | ["err_super_in_lambda_unsupported"]={ | ||
Line 3,872: | Line 3,872: | ||
[j]=o, | [j]=o, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_super_in_using_declaration"]={ | ["err_super_in_using_declaration"]={ | ||
Line 3,884: | Line 3,884: | ||
[j]=u, | [j]=u, | ||
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."}, | [c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."}, | ||
[k]={{bb, | [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);"}} | ||
}, | }, | ||
["err_sve_vector_in_non_sve_target"]={ | ["err_sve_vector_in_non_sve_target"]={ | ||
Line 3,896: | Line 3,896: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{hb, | [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;"}} | ||
}, | }, | ||
["err_swift_abi_parameter_wrong_type"]={ | ["err_swift_abi_parameter_wrong_type"]={ | ||
Line 3,908: | Line 3,908: | ||
[j]=o, | [j]=o, | ||
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | ||
[k]={{O, | [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;"}} | ||
}, | }, | ||
["err_swift_async_bad_block_type"]={ | ["err_swift_async_bad_block_type"]={ | ||
Line 3,920: | Line 3,920: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{O, | [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();"}} | ||
}, | }, | ||
["err_swift_async_error_no_error_parameter"]={ | ["err_swift_async_error_no_error_parameter"]={ | ||
Line 3,932: | Line 3,932: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{O, | [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);"}} | ||
}, | }, | ||
["err_swift_async_error_non_integral"]={ | ["err_swift_async_error_non_integral"]={ | ||
Line 3,944: | Line 3,944: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{O, | [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;"}} | ||
}, | }, | ||
["err_swift_async_error_without_swift_async"]={ | ["err_swift_async_error_without_swift_async"]={ | ||
Line 3,956: | Line 3,956: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{O, | [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);"}} | ||
}, | }, | ||
["err_swift_async_no_access"]={ | ["err_swift_async_no_access"]={ | ||
Line 3,968: | Line 3,968: | ||
[j]=o, | [j]=o, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{O, | [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;"}} | ||
}, | }, | ||
["err_swift_error_result_not_after_swift_context"]={ | ["err_swift_error_result_not_after_swift_context"]={ | ||
Line 3,980: | Line 3,980: | ||
[j]=o, | [j]=o, | ||
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | ||
[k]={{F, | [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);"}} | ||
}, | }, | ||
["err_swift_indirect_result_not_first"]={ | ["err_swift_indirect_result_not_first"]={ | ||
Line 3,992: | Line 3,992: | ||
[j]=o, | [j]=o, | ||
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | ||
[k]={{F, | [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);"}} | ||
}, | }, | ||
["err_swift_param_attr_not_swiftcall"]={ | ["err_swift_param_attr_not_swiftcall"]={ | ||
Line 4,004: | Line 4,004: | ||
[j]=o, | [j]=o, | ||
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."}, | ||
[k]={{F, | [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);"}} | ||
}, | }, | ||
["err_switch_explicit_conversion"]={ | ["err_switch_explicit_conversion"]={ | ||
Line 4,016: | Line 4,016: | ||
[j]=o, | [j]=o, | ||
[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, | [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; }"}} | ||
}, | }, | ||
["err_switch_incomplete_class_type"]={ | ["err_switch_incomplete_class_type"]={ | ||
Line 4,028: | Line 4,028: | ||
[j]=o, | [j]=o, | ||
[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, | [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(); }"}} | ||
}, | }, | ||
["err_switch_into_protected_scope"]={ | ["err_switch_into_protected_scope"]={ | ||
Line 4,040: | Line 4,040: | ||
[j]=o, | [j]=o, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_switch_multiple_conversions"]={ | ["err_switch_multiple_conversions"]={ | ||
Line 4,052: | Line 4,052: | ||
[j]=o, | [j]=o, | ||
[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, | [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; }"}} | ||
}, | }, | ||
["err_sycl_special_type_num_init_method"]={ | ["err_sycl_special_type_num_init_method"]={ | ||
Line 4,064: | Line 4,064: | ||
[j]=a, | [j]=a, | ||
[c]={tb,1616787805,sb}, | [c]={tb,1616787805,sb}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_synthesize_category_decl"]={ | ["err_synthesize_category_decl"]={ | ||
Line 4,076: | Line 4,076: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{Q, | [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);"}} | ||
}, | }, | ||
["err_synthesize_on_class_property"]={ | ["err_synthesize_on_class_property"]={ | ||
Line 4,088: | Line 4,088: | ||
[j]=o, | [j]=o, | ||
[c]={U,1480718311,V}, | [c]={U,1480718311,V}, | ||
[k]={{Q, | [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;"}} | ||
}, | }, | ||
["err_synthesize_variable_sized_ivar"]={ | ["err_synthesize_variable_sized_ivar"]={ | ||
Line 4,100: | Line 4,100: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_synthesized_property_name"]={ | ["err_synthesized_property_name"]={ | ||
Line 4,112: | Line 4,112: | ||
[j]=u, | [j]=u, | ||
[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", | [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);"}} | ||
}, | }, | ||
["err_synthesizing_arc_weak_property_disabled"]={ | ["err_synthesizing_arc_weak_property_disabled"]={ | ||
Line 4,124: | Line 4,124: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_synthesizing_arc_weak_property_no_runtime"]={ | ["err_synthesizing_arc_weak_property_no_runtime"]={ | ||
Line 4,136: | Line 4,136: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_systemz_invalid_tabort_code"]={ | ["err_systemz_invalid_tabort_code"]={ | ||
Line 4,148: | Line 4,148: | ||
[j]=o, | [j]=o, | ||
[c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"}, | [c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"}, | ||
[k]={{v, | [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();"}} | ||
}, | }, | ||
["err_tag_definition_of_typedef"]={ | ["err_tag_definition_of_typedef"]={ | ||
Line 4,160: | Line 4,160: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_tag_index_out_of_range"]={ | ["err_tag_index_out_of_range"]={ | ||
Line 4,172: | Line 4,172: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_tag_reference_conflict"]={ | ["err_tag_reference_conflict"]={ | ||
Line 4,184: | Line 4,184: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_tag_reference_non_tag"]={ | ["err_tag_reference_non_tag"]={ | ||
Line 4,196: | Line 4,196: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_tagless_friend_type_template"]={ | ["err_tagless_friend_type_template"]={ | ||
Line 4,208: | Line 4,208: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_target_clone_doesnt_match"]={ | ["err_target_clone_doesnt_match"]={ | ||
Line 4,220: | Line 4,220: | ||
[j]=a, | [j]=a, | ||
[c]={tb,1616787805,sb}, | [c]={tb,1616787805,sb}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_target_clone_must_have_default"]={ | ["err_target_clone_must_have_default"]={ | ||
Line 4,232: | Line 4,232: | ||
[j]=a, | [j]=a, | ||
[c]={tb,1616787805,sb}, | [c]={tb,1616787805,sb}, | ||
[k]={{O, | [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);"}} | ||
}, | }, | ||
["err_target_unknown_abi"]={ | ["err_target_unknown_abi"]={ | ||
Line 4,244: | Line 4,244: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_target_unknown_cpu"]={ | ["err_target_unknown_cpu"]={ | ||
Line 4,256: | Line 4,256: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_target_unknown_fpmath"]={ | ["err_target_unknown_fpmath"]={ | ||
Line 4,268: | Line 4,268: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_target_unknown_triple"]={ | ["err_target_unknown_triple"]={ | ||
Line 4,280: | Line 4,280: | ||
[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, | [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\";"}} | ||
}, | }, | ||
["err_target_unsupported_abi"]={ | ["err_target_unsupported_abi"]={ | ||
Line 4,292: | Line 4,292: | ||
[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."}, | ||
[k]={{"clang/lib/Basic/Targets/Mips.cpp", | [k]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // 64-bit ABI\'s require 64-bit CPU\'s.\n if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}} | ||
}, | }, | ||
["err_target_unsupported_abi_for_triple"]={ | ["err_target_unsupported_abi_for_triple"]={ | ||
Line 4,315: | Line 4,315: | ||
[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"}, | ||
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp", | [k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n if (Failure || Version < 7)\n D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n default:\n D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (Arch == llvm::Triple::x86)\n else if (Arch == llvm::Triple::arm)\n else if (Arch == llvm::Triple::x86_64)\n else if (Arch == llvm::Triple::mipsel)\n else\n D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}} | ||
}, | }, | ||
["err_target_unsupported_cpu_for_micromips"]={ | ["err_target_unsupported_cpu_for_micromips"]={ | ||
Line 4,327: | Line 4,327: | ||
[j]=a, | [j]=a, | ||
[c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"}, | [c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"}, | ||
[k]={{"clang/lib/Basic/Targets/Mips.cpp", | [k]={{"clang/lib/Basic/Targets/Mips.cpp",239,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // microMIPS64R6 backend was removed.\n if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}} | ||
}, | }, | ||
["err_target_unsupported_execute_only"]={ | ["err_target_unsupported_execute_only"]={ | ||
Line 4,339: | Line 4,339: | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_target_unsupported_fpmath"]={ | ["err_target_unsupported_fpmath"]={ | ||
Line 4,351: | Line 4,351: | ||
[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]={{"clang/lib/Basic/Targets/ARM.cpp", | [k]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n // matches the selected sse level.\n if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}} | ||
}, | }, | ||
["err_target_unsupported_mcmse"]={ | ["err_target_unsupported_mcmse"]={ | ||
Line 4,363: | Line 4,363: | ||
[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"}, | ||
[k]={{"clang/lib/Basic/Targets/ARM.cpp", | [k]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // This does not diagnose illegal cases like having both\n // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n for (const auto &Feature : Features) {\n if (Feature == \"+soft-float\") {\n } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n } else if (Feature == \"+neon\") {\n } else if (Feature == \"+hwdiv\") {\n } else if (Feature == \"+hwdiv-arm\") {\n } else if (Feature == \"+crc\") {\n } else if (Feature == \"+crypto\") {\n } else if (Feature == \"+sha2\") {\n } else if (Feature == \"+aes\") {\n } else if (Feature == \"+dsp\") {\n } else if (Feature == \"+fp64\") {\n } else if (Feature == \"+8msecext\") {\n if (CPUProfile != \"M\" || ArchVersion != 8) {\n Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}} | ||
}, | }, | ||
["err_target_unsupported_tp_hard"]={ | ["err_target_unsupported_tp_hard"]={ | ||
Line 4,375: | Line 4,375: | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_target_unsupported_type"]={ | ["err_target_unsupported_type"]={ | ||
Line 4,387: | Line 4,387: | ||
[j]="OpenMP Issue", | [j]="OpenMP Issue", | ||
[c]={pb,1615397021,ub}, | [c]={pb,1615397021,ub}, | ||
[k]={{hb, | [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();"}} | ||
}, | }, | ||
["err_target_unsupported_unaligned"]={ | ["err_target_unsupported_unaligned"]={ | ||
Line 4,399: | Line 4,399: | ||
[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, | [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\";"}} | ||
}, | }, | ||
["err_tcb_conflicting_attributes"]={ | ["err_tcb_conflicting_attributes"]={ | ||
Line 4,411: | Line 4,411: | ||
[j]=a, | [j]=a, | ||
[c]={W,1590001902,X}, | [c]={W,1590001902,X}, | ||
[k]={{O, | [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;"}} | ||
}, | }, | ||
["err_temp_copy_ambiguous"]={ | ["err_temp_copy_ambiguous"]={ | ||
Line 4,423: | Line 4,423: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_temp_copy_deleted"]={ | ["err_temp_copy_deleted"]={ | ||
Line 4,435: | Line 4,435: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_temp_copy_incomplete"]={ | ["err_temp_copy_incomplete"]={ | ||
Line 4,447: | Line 4,447: | ||
[j]=o, | [j]=o, | ||
[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, | [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))"}} | ||
}, | }, | ||
["err_temp_copy_no_viable"]={ | ["err_temp_copy_no_viable"]={ | ||
Line 4,459: | Line 4,459: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_arg_address_of_non_pointer"]={ | ["err_template_arg_address_of_non_pointer"]={ | ||
Line 4,471: | Line 4,471: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_arg_deduced_incomplete_pack"]={ | ["err_template_arg_deduced_incomplete_pack"]={ | ||
Line 4,483: | Line 4,483: | ||
[j]=o, | [j]=o, | ||
[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", | [k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n if (Arg.getKind() == TemplateArgument::Pack) {\n for (const auto &P : Arg.pack_elements()) {\n if (P.isNull()) {\n S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}} | ||
}, | }, | ||
["err_template_arg_field"]={ | ["err_template_arg_field"]={ | ||
Line 4,495: | Line 4,495: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_invalid"]={ | ["err_template_arg_invalid"]={ | ||
Line 4,507: | Line 4,507: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_arg_list_constraints_not_satisfied"]={ | ["err_template_arg_list_constraints_not_satisfied"]={ | ||
Line 4,519: | Line 4,519: | ||
[j]=o, | [j]=o, | ||
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"}, | [c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"}, | ||
[k]={{"clang/lib/Sema/SemaConcept.cpp", | [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;"}} | ||
}, | }, | ||
["err_template_arg_list_different_arity"]={ | ["err_template_arg_list_different_arity"]={ | ||
Line 4,531: | Line 4,531: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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());"}} | ||
}, | }, | ||
["err_template_arg_member_ptr_base_derived_not_supported"]={ | ["err_template_arg_member_ptr_base_derived_not_supported"]={ | ||
Line 4,543: | Line 4,543: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_arg_method"]={ | ["err_template_arg_method"]={ | ||
Line 4,555: | Line 4,555: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_must_be_expr"]={ | ["err_template_arg_must_be_expr"]={ | ||
Line 4,567: | Line 4,567: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_arg_must_be_template"]={ | ["err_template_arg_must_be_template"]={ | ||
Line 4,579: | Line 4,579: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_arg_must_be_type"]={ | ["err_template_arg_must_be_type"]={ | ||
Line 4,591: | Line 4,591: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_arg_must_be_type_suggest"]={ | ["err_template_arg_must_be_type_suggest"]={ | ||
Line 4,603: | Line 4,603: | ||
[j]=o, | [j]=o, | ||
[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, | [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 \");"}} | ||
}, | }, | ||
["err_template_arg_no_ref_bind"]={ | ["err_template_arg_no_ref_bind"]={ | ||
Line 4,615: | Line 4,615: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_nontype_ambig"]={ | ["err_template_arg_nontype_ambig"]={ | ||
Line 4,627: | Line 4,627: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_arg_not_address_constant"]={ | ["err_template_arg_not_address_constant"]={ | ||
Line 4,639: | Line 4,639: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_arg_not_address_of"]={ | ["err_template_arg_not_address_of"]={ | ||
Line 4,651: | Line 4,651: | ||
[j]=o, | [j]=o, | ||
[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, | [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(), \"&\");"}} | ||
}, | }, | ||
["err_template_arg_not_convertible"]={ | ["err_template_arg_not_convertible"]={ | ||
Line 4,663: | Line 4,663: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_arg_not_decl_ref"]={ | ["err_template_arg_not_decl_ref"]={ | ||
Line 4,675: | Line 4,675: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_arg_not_ice"]={ | ["err_template_arg_not_ice"]={ | ||
Line 4,687: | Line 4,687: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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; }"}} | ||
}, | }, | ||
["err_template_arg_not_integral_or_enumeral"]={ | ["err_template_arg_not_integral_or_enumeral"]={ | ||
Line 4,699: | Line 4,699: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_not_object_or_func"]={ | ["err_template_arg_not_object_or_func"]={ | ||
Line 4,711: | Line 4,711: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_not_pointer_to_member_form"]={ | ["err_template_arg_not_pointer_to_member_form"]={ | ||
Line 4,723: | Line 4,723: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_not_valid_template"]={ | ["err_template_arg_not_valid_template"]={ | ||
Line 4,735: | Line 4,735: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_arg_object_no_linkage"]={ | ["err_template_arg_object_no_linkage"]={ | ||
Line 4,747: | Line 4,747: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_arg_overload_type"]={ | ["err_template_arg_overload_type"]={ | ||
Line 4,759: | Line 4,759: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_arg_ref_bind_ignores_quals"]={ | ["err_template_arg_ref_bind_ignores_quals"]={ | ||
Line 4,771: | Line 4,771: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_arg_reference_var"]={ | ["err_template_arg_reference_var"]={ | ||
Line 4,783: | Line 4,783: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_arg_template_params_mismatch"]={ | ["err_template_arg_template_params_mismatch"]={ | ||
Line 4,795: | Line 4,795: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_arg_thread_local"]={ | ["err_template_arg_thread_local"]={ | ||
Line 4,807: | Line 4,807: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_arg_untyped_null_constant"]={ | ["err_template_arg_untyped_null_constant"]={ | ||
Line 4,819: | Line 4,819: | ||
[j]=o, | [j]=o, | ||
[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, | [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()), \")\");"}} | ||
}, | }, | ||
["err_template_arg_wrongtype_null_constant"]={ | ["err_template_arg_wrongtype_null_constant"]={ | ||
Line 4,831: | Line 4,831: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_defn_explicit_instantiation"]={ | ["err_template_defn_explicit_instantiation"]={ | ||
Line 4,843: | Line 4,843: | ||
[j]=u, | [j]=u, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_different_requires_clause"]={ | ["err_template_different_requires_clause"]={ | ||
Line 4,855: | Line 4,855: | ||
[j]=o, | [j]=o, | ||
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."}, | [c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_different_type_constraint"]={ | ["err_template_different_type_constraint"]={ | ||
Line 4,867: | Line 4,867: | ||
[j]=o, | [j]=o, | ||
[c]={kb,1576172311,lb}, | [c]={kb,1576172311,lb}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_expansion_into_fixed_list"]={ | ["err_template_expansion_into_fixed_list"]={ | ||
Line 4,879: | Line 4,879: | ||
[j]=o, | [j]=o, | ||
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_id_not_a_type"]={ | ["err_template_id_not_a_type"]={ | ||
Line 4,891: | Line 4,891: | ||
[j]=o, | [j]=o, | ||
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | [c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_inside_local_class"]={ | ["err_template_inside_local_class"]={ | ||
Line 4,903: | Line 4,903: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_instantiate_undefined"]={ | ["err_template_instantiate_undefined"]={ | ||
Line 4,915: | Line 4,915: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_instantiate_within_definition"]={ | ["err_template_instantiate_within_definition"]={ | ||
Line 4,927: | Line 4,927: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_kernel"]={ | ["err_template_kernel"]={ | ||
Line 4,939: | Line 4,939: | ||
[j]=o, | [j]=o, | ||
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."}, | [c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_template_kw_missing"]={ | ["err_template_kw_missing"]={ | ||
Line 4,951: | Line 4,951: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_kw_refers_to_dependent_non_template"]={ | ["err_template_kw_refers_to_dependent_non_template"]={ | ||
Line 4,963: | Line 4,963: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_kw_refers_to_non_template"]={ | ["err_template_kw_refers_to_non_template"]={ | ||
Line 4,975: | Line 4,975: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_kw_refers_to_type_template"]={ | ["err_template_kw_refers_to_type_template"]={ | ||
Line 4,987: | Line 4,987: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_linkage"]={ | ["err_template_linkage"]={ | ||
Line 4,999: | Line 4,999: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_member"]={ | ["err_template_member"]={ | ||
Line 5,011: | Line 5,011: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_template_member_noparams"]={ | ["err_template_member_noparams"]={ | ||
Line 5,023: | Line 5,023: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_template_missing_args"]={ | ["err_template_missing_args"]={ | ||
Line 5,035: | Line 5,035: | ||
[j]=o, | [j]=o, | ||
[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, | [k]={{q,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}} | ||
}, | }, | ||
["err_template_nontype_parm_bad_structural_type"]={ | ["err_template_nontype_parm_bad_structural_type"]={ | ||
Line 5,047: | Line 5,047: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_nontype_parm_bad_type"]={ | ["err_template_nontype_parm_bad_type"]={ | ||
Line 5,059: | Line 5,059: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_nontype_parm_different_type"]={ | ["err_template_nontype_parm_different_type"]={ | ||
Line 5,071: | Line 5,071: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_nontype_parm_incomplete"]={ | ["err_template_nontype_parm_incomplete"]={ | ||
Line 5,083: | Line 5,083: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{q, | [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))"}} | ||
}, | }, | ||
["err_template_nontype_parm_not_literal"]={ | ["err_template_nontype_parm_not_literal"]={ | ||
Line 5,095: | Line 5,095: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{q, | [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))"}} | ||
}, | }, | ||
["err_template_nontype_parm_not_structural"]={ | ["err_template_nontype_parm_not_structural"]={ | ||
Line 5,107: | Line 5,107: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_nontype_parm_rvalue_ref"]={ | ["err_template_nontype_parm_rvalue_ref"]={ | ||
Line 5,119: | Line 5,119: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_outside_namespace_or_class_scope"]={ | ["err_template_outside_namespace_or_class_scope"]={ | ||
Line 5,131: | Line 5,131: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_param_default_arg_inconsistent_redefinition"]={ | ["err_template_param_default_arg_inconsistent_redefinition"]={ | ||
Line 5,143: | Line 5,143: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_param_default_arg_missing"]={ | ["err_template_param_default_arg_missing"]={ | ||
Line 5,155: | Line 5,155: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_param_default_arg_redefinition"]={ | ["err_template_param_default_arg_redefinition"]={ | ||
Line 5,167: | Line 5,167: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_param_different_kind"]={ | ["err_template_param_different_kind"]={ | ||
Line 5,179: | Line 5,179: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_param_list_different_arity"]={ | ["err_template_param_list_different_arity"]={ | ||
Line 5,191: | Line 5,191: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_param_list_matches_nontemplate"]={ | ["err_template_param_list_matches_nontemplate"]={ | ||
Line 5,203: | Line 5,203: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_param_pack_default_arg"]={ | ["err_template_param_pack_default_arg"]={ | ||
Line 5,215: | Line 5,215: | ||
[j]=o, | [j]=o, | ||
[c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."}, | [c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_param_pack_must_be_last_template_parameter"]={ | ["err_template_param_pack_must_be_last_template_parameter"]={ | ||
Line 5,227: | Line 5,227: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_param_shadow"]={ | ["err_template_param_shadow"]={ | ||
Line 5,239: | Line 5,239: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{yb, | [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;"}} | ||
}, | }, | ||
["err_template_parameter_default_friend_template"]={ | ["err_template_parameter_default_friend_template"]={ | ||
Line 5,251: | Line 5,251: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_parameter_default_template_member"]={ | ["err_template_parameter_default_template_member"]={ | ||
Line 5,263: | Line 5,263: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_parameter_pack_non_pack"]={ | ["err_template_parameter_pack_non_pack"]={ | ||
Line 5,275: | Line 5,275: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_qualified_declarator_no_match"]={ | ["err_template_qualified_declarator_no_match"]={ | ||
Line 5,287: | Line 5,287: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_recursion_depth_exceeded"]={ | ["err_template_recursion_depth_exceeded"]={ | ||
Line 5,299: | Line 5,299: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp", | [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;"}} | ||
}, | }, | ||
["err_template_spec_decl_friend"]={ | ["err_template_spec_decl_friend"]={ | ||
Line 5,311: | Line 5,311: | ||
[j]=o, | [j]=o, | ||
[c]={"816d75b7012a",1269416766,"Support friend function specializations."}, | [c]={"816d75b7012a",1269416766,"Support friend function specializations."}, | ||
[k]={{t, | [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, \"<>\");"}} | ||
}, | }, | ||
["err_template_spec_decl_function_scope"]={ | ["err_template_spec_decl_function_scope"]={ | ||
Line 5,323: | Line 5,323: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_spec_default_arg"]={ | ["err_template_spec_default_arg"]={ | ||
Line 5,335: | Line 5,335: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_template_spec_extra_headers"]={ | ["err_template_spec_extra_headers"]={ | ||
Line 5,347: | Line 5,347: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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());"}} | ||
}, | }, | ||
["err_template_spec_friend"]={ | ["err_template_spec_friend"]={ | ||
Line 5,359: | Line 5,359: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_spec_needs_header"]={ | ["err_template_spec_needs_header"]={ | ||
Line 5,371: | Line 5,371: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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<> \");"}} | ||
}, | }, | ||
["err_template_spec_needs_template_parameters"]={ | ["err_template_spec_needs_template_parameters"]={ | ||
Line 5,383: | Line 5,383: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_spec_redecl_global_scope"]={ | ["err_template_spec_redecl_global_scope"]={ | ||
Line 5,395: | Line 5,395: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_spec_redecl_out_of_scope"]={ | ["err_template_spec_redecl_out_of_scope"]={ | ||
Line 5,407: | Line 5,407: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_template_spec_syntax_non_template"]={ | ["err_template_spec_syntax_non_template"]={ | ||
Line 5,419: | Line 5,419: | ||
[j]=u, | [j]=u, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{bb, | [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;"}} | ||
}, | }, | ||
["err_template_spec_unknown_kind"]={ | ["err_template_spec_unknown_kind"]={ | ||
Line 5,431: | Line 5,431: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_tag_noparams"]={ | ["err_template_tag_noparams"]={ | ||
Line 5,443: | Line 5,443: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_template_template_parameter_not_at_least_as_constrained"]={ | ["err_template_template_parameter_not_at_least_as_constrained"]={ | ||
Line 5,455: | Line 5,455: | ||
[j]=o, | [j]=o, | ||
[c]={kb,1576172311,lb}, | [c]={kb,1576172311,lb}, | ||
[k]={{q, | [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();"}} | ||
}, | }, | ||
["err_template_template_parm_no_parms"]={ | ["err_template_template_parm_no_parms"]={ | ||
Line 5,467: | Line 5,467: | ||
[j]=o, | [j]=o, | ||
[c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"}, | [c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"}, | ||
[k]={{q, | [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());"}} | ||
}, | }, | ||
["err_template_typedef"]={ | ["err_template_typedef"]={ | ||
Line 5,479: | Line 5,479: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_template_unnamed_class"]={ | ["err_template_unnamed_class"]={ | ||
Line 5,491: | Line 5,491: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_template_variable_noparams"]={ | ["err_template_variable_noparams"]={ | ||
Line 5,503: | Line 5,503: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_templated_invalid_declaration"]={ | ["err_templated_invalid_declaration"]={ | ||
Line 5,515: | Line 5,515: | ||
[j]=u, | [j]=u, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_templated_using_directive_declaration"]={ | ["err_templated_using_directive_declaration"]={ | ||
Line 5,527: | Line 5,527: | ||
[j]=u, | [j]=u, | ||
[c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."}, | [c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."}, | ||
[k]={{bb, | [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);"}} | ||
}, | }, | ||
["err_tentative_def_incomplete_type"]={ | ["err_tentative_def_incomplete_type"]={ | ||
Line 5,539: | Line 5,539: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{hb, | [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))"}} | ||
}, | }, | ||
["err_test_module_file_extension_format"]={ | ["err_test_module_file_extension_format"]={ | ||
Line 5,551: | Line 5,551: | ||
[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/CompilerInvocation.cpp", | [k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}} | ||
}, | }, | ||
["err_test_module_file_extension_version"]={ | ["err_test_module_file_extension_version"]={ | ||
Line 5,563: | Line 5,563: | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_this_capture"]={ | ["err_this_capture"]={ | ||
Line 5,575: | Line 5,575: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_this_captured_by_reference"]={ | ["err_this_captured_by_reference"]={ | ||
Line 5,587: | Line 5,587: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_this_static_member_func"]={ | ["err_this_static_member_func"]={ | ||
Line 5,599: | Line 5,599: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_thread_dynamic_init"]={ | ["err_thread_dynamic_init"]={ | ||
Line 5,611: | Line 5,611: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_thread_non_global"]={ | ["err_thread_non_global"]={ | ||
Line 5,623: | Line 5,623: | ||
[j]=o, | [j]=o, | ||
[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, | [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)\";"}} | ||
}, | }, | ||
["err_thread_non_thread"]={ | ["err_thread_non_thread"]={ | ||
Line 5,635: | Line 5,635: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_thread_nontrivial_dtor"]={ | ["err_thread_nontrivial_dtor"]={ | ||
Line 5,647: | Line 5,647: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_thread_thread_different_kind"]={ | ["err_thread_thread_different_kind"]={ | ||
Line 5,659: | Line 5,659: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_thread_unsupported"]={ | ["err_thread_unsupported"]={ | ||
Line 5,671: | Line 5,671: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_three_way_vector_comparison"]={ | ["err_three_way_vector_comparison"]={ | ||
Line 5,683: | Line 5,683: | ||
[j]=a, | [j]=a, | ||
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | [c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_throw_abstract_type"]={ | ["err_throw_abstract_type"]={ | ||
Line 5,695: | Line 5,695: | ||
[j]=o, | [j]=o, | ||
[c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."}, | [c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."}, | ||
[k]={{E, | [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))"}} | ||
}, | }, | ||
["err_throw_incomplete"]={ | ["err_throw_incomplete"]={ | ||
Line 5,707: | Line 5,707: | ||
[j]=o, | [j]=o, | ||
[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, | [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()))"}} | ||
}, | }, | ||
["err_throw_incomplete_ptr"]={ | ["err_throw_incomplete_ptr"]={ | ||
Line 5,719: | Line 5,719: | ||
[j]=o, | [j]=o, | ||
[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, | [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()))"}} | ||
}, | }, | ||
["err_throw_sizeless"]={ | ["err_throw_sizeless"]={ | ||
Line 5,731: | Line 5,731: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{E, | [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();"}} | ||
}, | }, | ||
["err_tls_var_aligned_over_maximum"]={ | ["err_tls_var_aligned_over_maximum"]={ | ||
Line 5,743: | Line 5,743: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_too_few_args_in_macro_invoc"]={ | ["err_too_few_args_in_macro_invoc"]={ | ||
Line 5,755: | Line 5,755: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{jb, | [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);"}} | ||
}, | }, | ||
["err_too_large_for_fixed_point"]={ | ["err_too_large_for_fixed_point"]={ | ||
Line 5,767: | Line 5,767: | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_too_many_args_in_macro_invoc"]={ | ["err_too_many_args_in_macro_invoc"]={ | ||
Line 5,779: | Line 5,779: | ||
[j]=x, | [j]=x, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{jb, | [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);"}} | ||
}, | }, | ||
["err_toomany_element_decls"]={ | ["err_toomany_element_decls"]={ | ||
Line 5,791: | Line 5,791: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{K, | [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));"}} | ||
}, | }, | ||
["err_trailing_requires_clause_on_deduction_guide"]={ | ["err_trailing_requires_clause_on_deduction_guide"]={ | ||
Line 5,803: | Line 5,803: | ||
[j]=o, | [j]=o, | ||
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_trailing_return_in_parens"]={ | ["err_trailing_return_in_parens"]={ | ||
Line 5,815: | Line 5,815: | ||
[j]=o, | [j]=o, | ||
[c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"}, | [c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"}, | ||
[k]={{F, | [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();"}} | ||
}, | }, | ||
["err_trailing_return_without_auto"]={ | ["err_trailing_return_without_auto"]={ | ||
Line 5,827: | Line 5,827: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_two_right_angle_brackets_need_space"]={ | ["err_two_right_angle_brackets_need_space"]={ | ||
Line 5,839: | Line 5,839: | ||
[j]=u, | [j]=u, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{rb, | [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;"}} | ||
}, | }, | ||
["err_type_attribute_wrong_type"]={ | ["err_type_attribute_wrong_type"]={ | ||
Line 5,851: | Line 5,851: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{F, | [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;"}} | ||
}, | }, | ||
["err_type_available_only_in_default_eval_method"]={ | ["err_type_available_only_in_default_eval_method"]={ | ||
Line 5,863: | Line 5,863: | ||
[j]=a, | [j]=a, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_type_constraint_missing_arguments"]={ | ["err_type_constraint_missing_arguments"]={ | ||
Line 5,875: | Line 5,875: | ||
[j]=o, | [j]=o, | ||
[c]={kb,1576172311,lb}, | [c]={kb,1576172311,lb}, | ||
[k]={{q, | [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;"}} | ||
}, | }, | ||
["err_type_constraint_non_type_concept"]={ | ["err_type_constraint_non_type_concept"]={ | ||
Line 5,887: | Line 5,887: | ||
[j]=o, | [j]=o, | ||
[c]={kb,1576172311,lb}, | [c]={kb,1576172311,lb}, | ||
[k]={{q, | [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);"}} | ||
}, | }, | ||
["err_type_defined_in_alias_template"]={ | ["err_type_defined_in_alias_template"]={ | ||
Line 5,899: | Line 5,899: | ||
[j]=o, | [j]=o, | ||
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."}, | [c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."}, | ||
[k]={{F, | [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;"}} | ||
}, | }, | ||
["err_type_defined_in_condition"]={ | ["err_type_defined_in_condition"]={ | ||
Line 5,911: | Line 5,911: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{F, | [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;"}} | ||
}, | }, | ||
["err_type_defined_in_enum"]={ | ["err_type_defined_in_enum"]={ | ||
Line 5,923: | Line 5,923: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_type_defined_in_for_range"]={ | ["err_type_defined_in_for_range"]={ | ||
Line 5,935: | Line 5,935: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_type_defined_in_param_type"]={ | ["err_type_defined_in_param_type"]={ | ||
Line 5,947: | Line 5,947: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_type_defined_in_result_type"]={ | ["err_type_defined_in_result_type"]={ | ||
Line 5,959: | Line 5,959: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_type_defined_in_type_specifier"]={ | ["err_type_defined_in_type_specifier"]={ | ||
Line 5,971: | Line 5,971: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_type_mismatch_continuation_class"]={ | ["err_type_mismatch_continuation_class"]={ | ||
Line 5,983: | Line 5,983: | ||
[j]=o, | [j]=o, | ||
[c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "}, | [c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "}, | ||
[k]={{Q, | [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();"}} | ||
}, | }, | ||
["err_type_pack_element_out_of_bounds"]={ | ["err_type_pack_element_out_of_bounds"]={ | ||
Line 5,995: | Line 5,995: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_type_safety_unknown_flag"]={ | ["err_type_safety_unknown_flag"]={ | ||
Line 6,007: | Line 6,007: | ||
[j]=u, | [j]=u, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_type_tag_for_datatype_not_ice"]={ | ["err_type_tag_for_datatype_not_ice"]={ | ||
Line 6,019: | Line 6,019: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_type_tag_for_datatype_too_large"]={ | ["err_type_tag_for_datatype_too_large"]={ | ||
Line 6,031: | Line 6,031: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_type_trait_arity"]={ | ["err_type_trait_arity"]={ | ||
Line 6,043: | Line 6,043: | ||
[j]=u, | [j]=u, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_type_unsupported"]={ | ["err_type_unsupported"]={ | ||
Line 6,055: | Line 6,055: | ||
[j]=o, | [j]=o, | ||
[c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"}, | [c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"}, | ||
[k]={{F, | [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\";"}} | ||
}, | }, | ||
["err_typecheck_address_of"]={ | ["err_typecheck_address_of"]={ | ||
Line 6,067: | Line 6,067: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{hb, | [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(); }"}} | ||
}, | }, | ||
["err_typecheck_addrof_dtor"]={ | ["err_typecheck_addrof_dtor"]={ | ||
Line 6,079: | Line 6,079: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_addrof_temporary"]={ | ["err_typecheck_addrof_temporary"]={ | ||
Line 6,091: | Line 6,091: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_ambiguous_condition"]={ | ["err_typecheck_ambiguous_condition"]={ | ||
Line 6,103: | Line 6,103: | ||
[j]=o, | [j]=o, | ||
[c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."}, | [c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."}, | ||
[k]={{E, | [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();"}} | ||
}, | }, | ||
["err_typecheck_arc_assign_externally_retained"]={ | ["err_typecheck_arc_assign_externally_retained"]={ | ||
Line 6,115: | Line 6,115: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_arc_assign_self"]={ | ["err_typecheck_arc_assign_self"]={ | ||
Line 6,127: | Line 6,127: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_arc_assign_self_class_method"]={ | ["err_typecheck_arc_assign_self_class_method"]={ | ||
Line 6,139: | Line 6,139: | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={ | ["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={ | ||
Line 6,151: | Line 6,151: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_typecheck_arr_assign_enumeration"]={ | ["err_typecheck_arr_assign_enumeration"]={ | ||
Line 6,163: | Line 6,163: | ||
[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", | [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;"}} | ||
}, | }, | ||
["err_typecheck_array_not_modifiable_lvalue"]={ | ["err_typecheck_array_not_modifiable_lvalue"]={ | ||
Line 6,175: | Line 6,175: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_assign_const"]={ | ["err_typecheck_assign_const"]={ | ||
Line 6,187: | Line 6,187: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_bool_condition"]={ | ["err_typecheck_bool_condition"]={ | ||
Line 6,199: | Line 6,199: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{ab, | [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();"}} | ||
}, | }, | ||
["err_typecheck_call_different_arg_types"]={ | ["err_typecheck_call_different_arg_types"]={ | ||
Line 6,211: | Line 6,211: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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();"}} | ||
}, | }, | ||
["err_typecheck_call_invalid_ordered_compare"]={ | ["err_typecheck_call_invalid_ordered_compare"]={ | ||
Line 6,223: | Line 6,223: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_invalid_unary_fp"]={ | ["err_typecheck_call_invalid_unary_fp"]={ | ||
Line 6,235: | Line 6,235: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_call_not_function"]={ | ["err_typecheck_call_not_function"]={ | ||
Line 6,247: | Line 6,247: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_requires_real_fp"]={ | ["err_typecheck_call_requires_real_fp"]={ | ||
Line 6,259: | Line 6,259: | ||
[j]=o, | [j]=o, | ||
[c]={T,1582847864,S}, | [c]={T,1582847864,S}, | ||
[k]={{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();"}} | ||
}, | }, | ||
["err_typecheck_call_too_few_args"]={ | ["err_typecheck_call_too_few_args"]={ | ||
Line 6,271: | Line 6,271: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_too_few_args_at_least"]={ | ["err_typecheck_call_too_few_args_at_least"]={ | ||
Line 6,283: | Line 6,283: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_call_too_few_args_at_least_one"]={ | ["err_typecheck_call_too_few_args_at_least_one"]={ | ||
Line 6,295: | Line 6,295: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_call_too_few_args_at_least_suggest"]={ | ["err_typecheck_call_too_few_args_at_least_suggest"]={ | ||
Line 6,307: | Line 6,307: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_call_too_few_args_one"]={ | ["err_typecheck_call_too_few_args_one"]={ | ||
Line 6,319: | Line 6,319: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_call_too_few_args_suggest"]={ | ["err_typecheck_call_too_few_args_suggest"]={ | ||
Line 6,331: | Line 6,331: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_call_too_many_args"]={ | ["err_typecheck_call_too_many_args"]={ | ||
Line 6,343: | Line 6,343: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_too_many_args_at_most"]={ | ["err_typecheck_call_too_many_args_at_most"]={ | ||
Line 6,355: | Line 6,355: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_too_many_args_at_most_one"]={ | ["err_typecheck_call_too_many_args_at_most_one"]={ | ||
Line 6,367: | Line 6,367: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_too_many_args_at_most_suggest"]={ | ["err_typecheck_call_too_many_args_at_most_suggest"]={ | ||
Line 6,379: | Line 6,379: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_call_too_many_args_one"]={ | ["err_typecheck_call_too_many_args_one"]={ | ||
Line 6,391: | Line 6,391: | ||
[j]=o, | [j]=o, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_typecheck_call_too_many_args_suggest"]={ | ["err_typecheck_call_too_many_args_suggest"]={ | ||
Line 6,403: | Line 6,403: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_cast_to_incomplete"]={ | ["err_typecheck_cast_to_incomplete"]={ | ||
Line 6,415: | Line 6,415: | ||
[j]=o, | [j]=o, | ||
[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, | [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))"}} | ||
}, | }, | ||
["err_typecheck_cast_to_union_no_type"]={ | ["err_typecheck_cast_to_union_no_type"]={ | ||
Line 6,427: | Line 6,427: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{eb, | [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();"}} | ||
}, | }, | ||
["err_typecheck_choose_expr_requires_constant"]={ | ["err_typecheck_choose_expr_requires_constant"]={ | ||
Line 6,439: | Line 6,439: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_typecheck_comparison_of_distinct_blocks"]={ | ["err_typecheck_comparison_of_distinct_blocks"]={ | ||
Line 6,451: | Line 6,451: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_comparison_of_distinct_pointers"]={ | ["err_typecheck_comparison_of_distinct_pointers"]={ | ||
Line 6,463: | Line 6,463: | ||
[j]=o, | [j]=o, | ||
[c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="}, | [c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="}, | ||
[k]={{p, | [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(); }"}} | ||
}, | }, | ||
["err_typecheck_comparison_of_fptr_to_void"]={ | ["err_typecheck_comparison_of_fptr_to_void"]={ | ||
Line 6,475: | Line 6,475: | ||
[j]=o, | [j]=o, | ||
[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, | [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(); }"}} | ||
}, | }, | ||
["err_typecheck_comparison_of_pointer_integer"]={ | ["err_typecheck_comparison_of_pointer_integer"]={ | ||
Line 6,487: | Line 6,487: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_cond_expect_int_float"]={ | ["err_typecheck_cond_expect_int_float"]={ | ||
Line 6,499: | Line 6,499: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_cond_expect_nonfloat"]={ | ["err_typecheck_cond_expect_nonfloat"]={ | ||
Line 6,511: | Line 6,511: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_cond_expect_scalar"]={ | ["err_typecheck_cond_expect_scalar"]={ | ||
Line 6,523: | Line 6,523: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{eb, | [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();"}} | ||
}, | }, | ||
["err_typecheck_cond_incompatible_operands"]={ | ["err_typecheck_cond_incompatible_operands"]={ | ||
Line 6,535: | Line 6,535: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_cond_incompatible_operands_null"]={ | ["err_typecheck_cond_incompatible_operands_null"]={ | ||
Line 6,547: | Line 6,547: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_convert_discards_qualifiers"]={ | ["err_typecheck_convert_discards_qualifiers"]={ | ||
Line 6,559: | Line 6,559: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_incompatible"]={ | ["err_typecheck_convert_incompatible"]={ | ||
Line 6,571: | Line 6,571: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_incompatible_block_pointer"]={ | ["err_typecheck_convert_incompatible_block_pointer"]={ | ||
Line 6,583: | Line 6,583: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_incompatible_function_pointer"]={ | ["err_typecheck_convert_incompatible_function_pointer"]={ | ||
Line 6,595: | Line 6,595: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_incompatible_pointer"]={ | ["err_typecheck_convert_incompatible_pointer"]={ | ||
Line 6,607: | Line 6,607: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_incompatible_pointer_sign"]={ | ["err_typecheck_convert_incompatible_pointer_sign"]={ | ||
Line 6,619: | Line 6,619: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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) {"}} | ||
}, | }, | ||
["err_typecheck_convert_int_pointer"]={ | ["err_typecheck_convert_int_pointer"]={ | ||
Line 6,631: | Line 6,631: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_pointer_int"]={ | ["err_typecheck_convert_pointer_int"]={ | ||
Line 6,643: | Line 6,643: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_convert_pointer_void_func"]={ | ["err_typecheck_convert_pointer_void_func"]={ | ||
Line 6,655: | Line 6,655: | ||
[j]=o, | [j]=o, | ||
[c]={G,1576908663,H}, | [c]={G,1576908663,H}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_converted_constant_expression"]={ | ["err_typecheck_converted_constant_expression"]={ | ||
Line 6,667: | Line 6,667: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_converted_constant_expression_disallowed"]={ | ["err_typecheck_converted_constant_expression_disallowed"]={ | ||
Line 6,679: | Line 6,679: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_converted_constant_expression_indirect"]={ | ["err_typecheck_converted_constant_expression_indirect"]={ | ||
Line 6,691: | Line 6,691: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_decl_incomplete_type"]={ | ["err_typecheck_decl_incomplete_type"]={ | ||
Line 6,703: | Line 6,703: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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())))"}} | ||
}, | }, | ||
["err_typecheck_deleted_function"]={ | ["err_typecheck_deleted_function"]={ | ||
Line 6,715: | Line 6,715: | ||
[j]=o, | [j]=o, | ||
[c]={Ab,1260399737,zb}, | [c]={Ab,1260399737,zb}, | ||
[k]={{D, | [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();"}} | ||
}, | }, | ||
["err_typecheck_duplicate_vector_components_not_mlvalue"]={ | ["err_typecheck_duplicate_vector_components_not_mlvalue"]={ | ||
Line 6,727: | Line 6,727: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_expect_flt_or_vector"]={ | ["err_typecheck_expect_flt_or_vector"]={ | ||
Line 6,739: | Line 6,739: | ||
[j]=o, | [j]=o, | ||
[c]={pb,1615397021,ub}, | [c]={pb,1615397021,ub}, | ||
[k]={{v, | [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;"}} | ||
}, | }, | ||
["err_typecheck_expect_int"]={ | ["err_typecheck_expect_int"]={ | ||
Line 6,751: | Line 6,751: | ||
[j]=o, | [j]=o, | ||
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"}, | [c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"}, | ||
[k]={{v, | [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();"}} | ||
}, | }, | ||
["err_typecheck_expect_scalar_operand"]={ | ["err_typecheck_expect_scalar_operand"]={ | ||
Line 6,763: | Line 6,763: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{eb, | [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;"}} | ||
}, | }, | ||
["err_typecheck_expression_not_modifiable_lvalue"]={ | ["err_typecheck_expression_not_modifiable_lvalue"]={ | ||
Line 6,775: | Line 6,775: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_field_variable_size"]={ | ["err_typecheck_field_variable_size"]={ | ||
Line 6,787: | Line 6,787: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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))"}} | ||
}, | }, | ||
["err_typecheck_illegal_increment_decrement"]={ | ["err_typecheck_illegal_increment_decrement"]={ | ||
Line 6,799: | Line 6,799: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_incompatible_address_space"]={ | ["err_typecheck_incompatible_address_space"]={ | ||
Line 6,811: | Line 6,811: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_incompatible_nested_address_space"]={ | ["err_typecheck_incompatible_nested_address_space"]={ | ||
Line 6,823: | Line 6,823: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_incompatible_ownership"]={ | ["err_typecheck_incompatible_ownership"]={ | ||
Line 6,835: | Line 6,835: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_incomplete_array_needs_initializer"]={ | ["err_typecheck_incomplete_array_needs_initializer"]={ | ||
Line 6,847: | Line 6,847: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_typecheck_incomplete_tag"]={ | ["err_typecheck_incomplete_tag"]={ | ||
Line 6,859: | Line 6,859: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{I, | [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))"}} | ||
}, | }, | ||
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={ | ["err_typecheck_incomplete_type_not_modifiable_lvalue"]={ | ||
Line 6,871: | Line 6,871: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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);"}} | ||
}, | }, | ||
["err_typecheck_indirection_requires_pointer"]={ | ["err_typecheck_indirection_requires_pointer"]={ | ||
Line 6,883: | Line 6,883: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_indirection_through_void_pointer_cpp"]={ | ["err_typecheck_indirection_through_void_pointer_cpp"]={ | ||
Line 6,895: | Line 6,895: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_invalid_lvalue_addrof"]={ | ["err_typecheck_invalid_lvalue_addrof"]={ | ||
Line 6,907: | Line 6,907: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={ | ["err_typecheck_invalid_lvalue_addrof_addrof_function"]={ | ||
Line 6,919: | Line 6,919: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_invalid_operands"]={ | ["err_typecheck_invalid_operands"]={ | ||
Line 6,931: | Line 6,931: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_invalid_restrict_invalid_pointee"]={ | ["err_typecheck_invalid_restrict_invalid_pointee"]={ | ||
Line 6,943: | Line 6,943: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{F, | [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;"}} | ||
}, | }, | ||
["err_typecheck_invalid_restrict_not_pointer"]={ | ["err_typecheck_invalid_restrict_not_pointer"]={ | ||
Line 6,955: | Line 6,955: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{F, | [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;"}} | ||
}, | }, | ||
["err_typecheck_invalid_restrict_not_pointer_noarg"]={ | ["err_typecheck_invalid_restrict_not_pointer_noarg"]={ | ||
Line 6,967: | Line 6,967: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_ivar_variable_size"]={ | ["err_typecheck_ivar_variable_size"]={ | ||
Line 6,979: | Line 6,979: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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))"}} | ||
}, | }, | ||
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={ | ["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={ | ||
Line 6,991: | Line 6,991: | ||
[j]=o, | [j]=o, | ||
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"}, | [c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_lvalue_casts_not_supported"]={ | ["err_typecheck_lvalue_casts_not_supported"]={ | ||
Line 7,003: | Line 7,003: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_member_reference_arrow"]={ | ["err_typecheck_member_reference_arrow"]={ | ||
Line 7,015: | Line 7,015: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{E, | [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();"}} | ||
}, | }, | ||
["err_typecheck_member_reference_ivar"]={ | ["err_typecheck_member_reference_ivar"]={ | ||
Line 7,027: | Line 7,027: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{I, | [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();"}} | ||
}, | }, | ||
["err_typecheck_member_reference_ivar_suggest"]={ | ["err_typecheck_member_reference_ivar_suggest"]={ | ||
Line 7,039: | Line 7,039: | ||
[j]=o, | [j]=o, | ||
[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, | [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);"}} | ||
}, | }, | ||
["err_typecheck_member_reference_struct_union"]={ | ["err_typecheck_member_reference_struct_union"]={ | ||
Line 7,051: | Line 7,051: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{I, | [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;"}} | ||
}, | }, | ||
["err_typecheck_member_reference_suggestion"]={ | ["err_typecheck_member_reference_suggestion"]={ | ||
Line 7,063: | Line 7,063: | ||
[j]=o, | [j]=o, | ||
[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, | [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, \"->\");"}} | ||
}, | }, | ||
["err_typecheck_member_reference_type"]={ | ["err_typecheck_member_reference_type"]={ | ||
Line 7,075: | Line 7,075: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{I, | [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);"}} | ||
}, | }, | ||
["err_typecheck_member_reference_unknown"]={ | ["err_typecheck_member_reference_unknown"]={ | ||
Line 7,087: | Line 7,087: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{I, | [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);"}} | ||
}, | }, | ||
["err_typecheck_missing_return_type_incompatible"]={ | ["err_typecheck_missing_return_type_incompatible"]={ | ||
Line 7,099: | Line 7,099: | ||
[j]=o, | [j]=o, | ||
[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, | [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*/;"}} | ||
}, | }, | ||
["err_typecheck_negative_array_size"]={ | ["err_typecheck_negative_array_size"]={ | ||
Line 7,111: | Line 7,111: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_typecheck_non_object_not_modifiable_lvalue"]={ | ["err_typecheck_non_object_not_modifiable_lvalue"]={ | ||
Line 7,123: | Line 7,123: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_nonviable_condition"]={ | ["err_typecheck_nonviable_condition"]={ | ||
Line 7,135: | Line 7,135: | ||
[j]=o, | [j]=o, | ||
[c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "}, | [c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "}, | ||
[k]={{D, | [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;"}} | ||
}, | }, | ||
["err_typecheck_nonviable_condition_incomplete"]={ | ["err_typecheck_nonviable_condition_incomplete"]={ | ||
Line 7,147: | Line 7,147: | ||
[j]=o, | [j]=o, | ||
[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, | [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()))"}} | ||
}, | }, | ||
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={ | ["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={ | ||
Line 7,159: | Line 7,159: | ||
[j]=o, | [j]=o, | ||
[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, | [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 */"}} | ||
}, | }, | ||
["err_typecheck_ordered_comparison_of_function_pointers"]={ | ["err_typecheck_ordered_comparison_of_function_pointers"]={ | ||
Line 7,171: | Line 7,171: | ||
[j]=o, | [j]=o, | ||
[c]={pb,1615397021,ub}, | [c]={pb,1615397021,ub}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={ | ["err_typecheck_ordered_comparison_of_pointer_and_zero"]={ | ||
Line 7,183: | Line 7,183: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typecheck_pointer_arith_function_type"]={ | ["err_typecheck_pointer_arith_function_type"]={ | ||
Line 7,195: | Line 7,195: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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 */"}} | ||
}, | }, | ||
["err_typecheck_pointer_arith_void_type"]={ | ["err_typecheck_pointer_arith_void_type"]={ | ||
Line 7,207: | Line 7,207: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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(); }"}} | ||
}, | }, | ||
["err_typecheck_sclass_fscope"]={ | ["err_typecheck_sclass_fscope"]={ | ||
Line 7,219: | Line 7,219: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_typecheck_sclass_func"]={ | ["err_typecheck_sclass_func"]={ | ||
Line 7,231: | Line 7,231: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_typecheck_statement_requires_integer"]={ | ["err_typecheck_statement_requires_integer"]={ | ||
Line 7,243: | Line 7,243: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{K, | [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; }"}} | ||
}, | }, | ||
["err_typecheck_statement_requires_scalar"]={ | ["err_typecheck_statement_requires_scalar"]={ | ||
Line 7,255: | Line 7,255: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_sub_ptr_compatible"]={ | ["err_typecheck_sub_ptr_compatible"]={ | ||
Line 7,267: | Line 7,267: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{v, | [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();"}} | ||
}, | }, | ||
["err_typecheck_subscript_not_integer"]={ | ["err_typecheck_subscript_not_integer"]={ | ||
Line 7,279: | Line 7,279: | ||
[j]=o, | [j]=o, | ||
[c]={"003af249275a",1240699855,"minor diagnostics improvements."}, | [c]={"003af249275a",1240699855,"minor diagnostics improvements."}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_typecheck_subscript_value"]={ | ["err_typecheck_subscript_value"]={ | ||
Line 7,291: | Line 7,291: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_typecheck_sve_rvv_ambiguous"]={ | ["err_typecheck_sve_rvv_ambiguous"]={ | ||
Line 7,303: | Line 7,303: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_sve_rvv_gnu_ambiguous"]={ | ["err_typecheck_sve_rvv_gnu_ambiguous"]={ | ||
Line 7,315: | Line 7,315: | ||
[j]=o, | [j]=o, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={ | ["err_typecheck_three_way_comparison_of_pointer_and_zero"]={ | ||
Line 7,327: | Line 7,327: | ||
[j]=o, | [j]=o, | ||
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | [c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_typecheck_unary_expr"]={ | ["err_typecheck_unary_expr"]={ | ||
Line 7,339: | Line 7,339: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{p, | [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());"}} | ||
}, | }, | ||
["err_typecheck_vector_lengths_not_equal"]={ | ["err_typecheck_vector_lengths_not_equal"]={ | ||
Line 7,351: | Line 7,351: | ||
[j]=o, | [j]=o, | ||
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"}, | [c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"}, | ||
[k]={{p, | [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();"}} | ||
}, | }, | ||
["err_typecheck_vector_not_convertable"]={ | ["err_typecheck_vector_not_convertable"]={ | ||
Line 7,363: | Line 7,363: | ||
[j]=o, | [j]=o, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_vector_not_convertable_implict_truncation"]={ | ["err_typecheck_vector_not_convertable_implict_truncation"]={ | ||
Line 7,375: | Line 7,375: | ||
[j]=o, | [j]=o, | ||
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"}, | [c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"}, | ||
[k]={{p, | [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;"}} | ||
}, | }, | ||
["err_typecheck_vector_not_convertable_non_scalar"]={ | ["err_typecheck_vector_not_convertable_non_scalar"]={ | ||
Line 7,387: | Line 7,387: | ||
[j]=o, | [j]=o, | ||
[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, | [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();"}} | ||
}, | }, | ||
["err_typecheck_wasm_table_must_have_zero_length"]={ | ["err_typecheck_wasm_table_must_have_zero_length"]={ | ||
Line 7,399: | Line 7,399: | ||
[j]=a, | [j]=a, | ||
[c]={M,1625925174,L}, | [c]={M,1625925174,L}, | ||
[k]={{t, | [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);"}} | ||
}, | }, | ||
["err_typecheck_zero_array_size"]={ | ["err_typecheck_zero_array_size"]={ | ||
Line 7,411: | Line 7,411: | ||
[j]=o, | [j]=o, | ||
[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", | [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();"}} | ||
}, | }, | ||
["err_typedef_changes_linkage"]={ | ["err_typedef_changes_linkage"]={ | ||
Line 7,423: | Line 7,423: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
}, | }, | ||
["err_typedef_not_bitfield"]={ | ["err_typedef_not_bitfield"]={ | ||
Line 7,435: | Line 7,435: | ||
[j]=o, | [j]=o, | ||
[c]={r,1237025389,s}, | [c]={r,1237025389,s}, | ||
[k]={{y, | [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();"}} | ||
}, | }, | ||
["err_typedef_not_identifier"]={ | ["err_typedef_not_identifier"]={ | ||
Line 7,447: | Line 7,447: | ||
[j]=o, | [j]=o, | ||
[c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"}, | [c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"}, | ||
[k]={{t, | [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();"}} | ||
}, | }, | ||
["err_typename_identifiers_only"]={ | ["err_typename_identifiers_only"]={ | ||
Line 7,459: | Line 7,459: | ||
[j]=u, | [j]=u, | ||
[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, | [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));"}} | ||
}, | }, | ||
["err_typename_invalid_constexpr"]={ | ["err_typename_invalid_constexpr"]={ | ||
Line 7,471: | Line 7,471: | ||
[j]=u, | [j]=u, | ||
[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, | [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());"}} | ||
}, | }, | ||
["err_typename_invalid_functionspec"]={ | ["err_typename_invalid_functionspec"]={ | ||
Line 7,483: | Line 7,483: | ||
[j]=u, | [j]=u, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{R, | [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);"}} | ||
}, | }, | ||
["err_typename_invalid_storageclass"]={ | ["err_typename_invalid_storageclass"]={ | ||
Line 7,495: | Line 7,495: | ||
[j]=u, | [j]=u, | ||
[c]={A,1236199783,z}, | [c]={A,1236199783,z}, | ||
[k]={{R, | [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);"}} | ||
}, | }, | ||
["err_typename_missing"]={ | ["err_typename_missing"]={ | ||
Line 7,507: | Line 7,507: | ||
[j]=o, | [j]=o, | ||
[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, | [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;"}} | ||
} | } | ||
}; | }; |
edits