Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) No edit summary |
Timo.stripf (talk | contribs) No edit summary |
||
Line 119: | Line 119: | ||
[h]=z, | [h]=z, | ||
[e]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble"}, | [e]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble"}, | ||
[k]={{H,2371,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n/// SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n/// directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n/// lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n // Check for circular inclusion of the main file.\n // We can\'t generate a consistent preamble with regard to the conditional\n // stack if the main file is included again as due to the preamble bounds\n // some directives (e.g. #endif of a header guard) will never be seen.\n // Since this will lead to confusing errors, avoid the inclusion.\n if (Action == Enter && File && PreambleConditionalStack.isRecording() && SourceMgr.isMainFile(File->getFileEntry())) {\n Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble);"}} | [k]={{H,2371,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n/// SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n/// directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n/// lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n // ...\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 131: | Line 131: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line. This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n Diag(Result, diag::err_pp_invalid_directive) << 0;"}}, | [k]={{H,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line. This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n // ...\n Diag(Result, diag::err_pp_invalid_directive) << 0;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"} | ["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"} | ||
Line 146: | Line 146: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{Q,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison. PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n while (true) {\n // Can only poison identifiers.\n if (Tok.isNot(tok::raw_identifier)) {\n Diag(Tok, diag::err_pp_invalid_poison);"}} | [k]={{Q,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison. PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n // ...\n while (true) {\n // ...\n // Can only poison identifiers.\n if (Tok.isNot(tok::raw_identifier)) {\n Diag(Tok, diag::err_pp_invalid_poison);"}} | ||
}, | }, | ||
["err_pp_invalid_tok_in_arg_list"]={ | ["err_pp_invalid_tok_in_arg_list"]={ | ||
Line 158: | Line 158: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n while (true) {\n default:\n if (!II) {\n Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}} | [k]={{H,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n default:\n // ...\n if (!II) {\n // ...\n Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}} | ||
}, | }, | ||
["err_pp_invalid_udl"]={ | ["err_pp_invalid_udl"]={ | ||
Line 170: | Line 170: | ||
[h]=z, | [h]=z, | ||
[e]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and"}, | [e]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and"}, | ||
[k]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n case tok::numeric_constant: {\n // Complain about, and drop, any ud-suffix.\n if (Literal.hasUDSuffix())\n PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"clang/lib/Lex/PPExpressions.cpp",380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n case tok::utf32_char_constant: { // U\'x\'\n // Complain about, and drop, any ud-suffix.\n if (PeekTok.hasUDSuffix())\n PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}}, | [k]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n // ...\n case tok::numeric_constant: {\n // ...\n // Complain about, and drop, any ud-suffix.\n if (Literal.hasUDSuffix())\n PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"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 // ...\n case tok::char_constant: // \'x\'\n case tok::wide_char_constant: // L\'x\'\n case tok::utf8_char_constant: // u8\'x\'\n case tok::utf16_char_constant: // u\'x\'\n case tok::utf32_char_constant: { // U\'x\'\n // Complain about, and drop, any ud-suffix.\n if (PeekTok.hasUDSuffix())\n PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"} | ["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"} | ||
Line 185: | Line 185: | ||
[h]=z, | [h]=z, | ||
[e]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted"}, | [e]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted"}, | ||
[k]={{H,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n for (unsigned i = 0; i != ActualLength; ++i) {\n if (!isDigit(DigitTokBegin[i])) {\n PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}}, | [k]={{H,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n // ...\n for (unsigned i = 0; i != ActualLength; ++i) {\n // ...\n if (!isDigit(DigitTokBegin[i])) {\n PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}}, | ||
[o]={ | [o]={ | ||
[Wb]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"} | [Wb]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"} | ||
Line 200: | Line 200: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod))\n else if (StrTok.isNot(tok::string_literal)) {\n Diag(StrTok, diag::err_pp_line_invalid_filename);"}}, | [k]={{H,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod))\n // ...\n else if (StrTok.isNot(tok::string_literal)) {\n Diag(StrTok, diag::err_pp_line_invalid_filename);"}}, | ||
[o]={ | [o]={ | ||
[Wb]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"} | [Wb]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"} | ||
Line 215: | Line 215: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}}, | [k]={{H,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // ...\n if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}}, | ||
[o]={ | [o]={ | ||
[Wb]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"} | [Wb]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"} | ||
Line 230: | Line 230: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod))\n else if (StrTok.isNot(tok::string_literal)) {\n } else if (StrTok.hasUDSuffix()) {\n } else {\n if (Literal.Pascal) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{H,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n } else if (StrTok.isNot(tok::string_literal)) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{H,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n } else if (StrTok.isNot(tok::string_literal)) {\n } else if (StrTok.hasUDSuffix()) {\n } else {\n if (Literal.Pascal) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}}, | [k]={{H,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod))\n // ...\n else if (StrTok.isNot(tok::string_literal)) {\n // ...\n } else if (StrTok.hasUDSuffix()) {\n // ...\n } else {\n // ...\n if (Literal.Pascal) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{H,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n // ...\n } else if (StrTok.isNot(tok::string_literal)) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{H,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n // ...\n } else if (StrTok.isNot(tok::string_literal)) {\n // ...\n } else if (StrTok.hasUDSuffix()) {\n // ...\n } else {\n // ...\n if (Literal.Pascal) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}}, | ||
[o]={ | [o]={ | ||
[Wb]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"} | [Wb]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"} | ||
Line 245: | Line 245: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n if (FlagVal == 1) {\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n if (FlagVal == 1) {\n } else if (FlagVal == 2) {\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // We must have 3 if there are still flags.\n if (FlagVal != 3) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{H,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // We must have 4 if there is yet another flag.\n if (FlagVal != 4) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{H,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}}, | [k]={{H,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (FlagVal == 1) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (FlagVal == 1) {\n // ...\n } else if (FlagVal == 2) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n // We must have 3 if there are still flags.\n if (FlagVal != 3) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{H,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{H,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n // We must have 4 if there is yet another flag.\n if (FlagVal != 4) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{H,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}}, | ||
[o]={ | [o]={ | ||
[Wb]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"} | [Wb]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"} | ||
Line 260: | Line 260: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n if (FlagVal == 1) {\n } else if (FlagVal == 2) {\n if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}}, | [k]={{H,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (FlagVal == 1) {\n // ...\n } else if (FlagVal == 2) {\n // ...\n if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"} | ["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"} | ||
Line 275: | Line 275: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}} | [k]={{H,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // ...\n if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}} | ||
}, | }, | ||
["err_pp_macro_not_identifier"]={ | ["err_pp_macro_not_identifier"]={ | ||
Line 287: | Line 287: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n if (!II)\n return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}}, | [k]={{H,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n // ...\n if (!II)\n return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"} | ["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"} | ||
Line 302: | Line 302: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n // If the token kind isn\'t a string, it\'s a malformed directive.\n if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n Diag(StrTok, diag::err_pp_malformed_ident);"}} | [k]={{H,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n // ...\n // If the token kind isn\'t a string, it\'s a malformed directive.\n if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n Diag(StrTok, diag::err_pp_malformed_ident);"}} | ||
}, | }, | ||
["err_pp_missing_lparen_in_vaopt_use"]={ | ["err_pp_missing_lparen_in_vaopt_use"]={ | ||
Line 314: | Line 314: | ||
[h]=z, | [h]=z, | ||
[e]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | [e]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | ||
[k]={{H,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n if (VAOCtx.isVAOptToken(Tok)) {\n if (Tok.isNot(tok::l_paren)) {\n Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}}, | [k]={{H,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n // ...\n if (VAOCtx.isVAOptToken(Tok)) {\n // ...\n if (Tok.isNot(tok::l_paren)) {\n Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"} | ["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"} | ||
Line 344: | Line 344: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n while (true) {\n case tok::ellipsis: // #define X(... -> C99 varargs\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{H,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n while (true) {\n case tok::eod: // #define X(\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{H,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n while (true) {\n default:\n case tok::ellipsis: // #define X(A... -> GCC extension\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}} | [k]={{H,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n case tok::ellipsis: // #define X(... -> C99 varargs\n // ...\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{H,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n case tok::eod: // #define X(\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{H,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n default:\n // ...\n case tok::ellipsis: // #define X(A... -> GCC extension\n // ...\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}} | ||
}, | }, | ||
["err_pp_module_begin_no_module_map"]={ | ["err_pp_module_begin_no_module_map"]={ | ||
Line 356: | Line 356: | ||
[h]=z, | [h]=z, | ||
[e]={dc,1493857794,ib,ib}, | [e]={dc,1493857794,ib,ib}, | ||
[k]={{Q,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (!M) {\n PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}} | [k]={{Q,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (!M) {\n PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}} | ||
}, | }, | ||
["err_pp_module_begin_no_submodule"]={ | ["err_pp_module_begin_no_submodule"]={ | ||
Line 368: | Line 368: | ||
[h]=z, | [h]=z, | ||
[e]={dc,1493857794,ib,ib}, | [e]={dc,1493857794,ib,ib}, | ||
[k]={{Q,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n for (unsigned I = 1; I != ModuleName.size(); ++I) {\n if (!NewM) {\n PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}} | [k]={{Q,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n for (unsigned I = 1; I != ModuleName.size(); ++I) {\n // ...\n if (!NewM) {\n PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}} | ||
}, | }, | ||
["err_pp_module_begin_without_module_end"]={ | ["err_pp_module_begin_without_module_end"]={ | ||
Line 380: | Line 380: | ||
[h]=z, | [h]=z, | ||
[e]={dc,1493857794,ib,ib}, | [e]={dc,1493857794,ib,ib}, | ||
[k]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}}, | [k]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n // ...\n if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"} | ["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"} | ||
Line 395: | Line 395: | ||
[h]=z, | [h]=z, | ||
[e]={dc,1493857794,ib,ib}, | [e]={dc,1493857794,ib,ib}, | ||
[k]={{Q,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (ModuleName.front().first->getName() != Current) {\n PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}} | [k]={{Q,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (ModuleName.front().first->getName() != Current) {\n PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}} | ||
}, | }, | ||
["err_pp_module_build_missing_end"]={ | ["err_pp_module_build_missing_end"]={ | ||
Line 407: | Line 407: | ||
[h]=z, | [h]=z, | ||
[e]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build"}, | [e]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build"}, | ||
[k]={{Q,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n while (true) {\n if (Tok.is(tok::eof)) {\n Diag(Loc, diag::err_pp_module_build_missing_end);"}}, | [k]={{Q,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n // ...\n while (true) {\n // ...\n if (Tok.is(tok::eof)) {\n Diag(Loc, diag::err_pp_module_build_missing_end);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"} | ["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"} | ||
Line 422: | Line 422: | ||
[h]=z, | [h]=z, | ||
[e]={dc,1493857794,ib,ib}, | [e]={dc,1493857794,ib,ib}, | ||
[k]={{Q,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (M)\n else\n PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}}, | [k]={{Q,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (M)\n // ...\n else\n PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"} | ["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"} | ||
Line 437: | Line 437: | ||
[h]=z, | [h]=z, | ||
[e]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros"}, | [e]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros"}, | ||
[k]={{Fb,1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n already_lexed:\n case tok::l_paren:\n if (!SuppressDiagnostic) {\n PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}}, | [k]={{Fb,1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n // ...\n already_lexed:\n // ...\n case tok::l_paren:\n // ...\n if (!SuppressDiagnostic) {\n PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"} | ["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"} | ||
Line 452: | Line 452: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n if (II->isCPlusPlusOperatorKeyword()) {\n Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}}, | [k]={{H,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n // ...\n if (II->isCPlusPlusOperatorKeyword()) {\n // ...\n Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"} | ["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"} | ||
Line 467: | Line 467: | ||
[h]=z, | [h]=z, | ||
[e]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"}, | [e]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"}, | ||
[k]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n else if (!PPOpts->PCHWithHdrStopCreate)\n Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}} | [k]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n // ...\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n // ...\n else if (!PPOpts->PCHWithHdrStopCreate)\n Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}} | ||
}, | }, | ||
["err_pp_pragma_unsafe_buffer_usage_syntax"]={ | ["err_pp_pragma_unsafe_buffer_usage_syntax"]={ | ||
Line 479: | Line 479: | ||
[h]=z, | [h]=z, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{Q,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{Q,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (II->isStr(\"begin\")) {\n } else if (II->isStr(\"end\")) {\n } else\n PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}}, | [k]={{Q,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{Q,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n // ...\n if (II->isStr(\"begin\")) {\n // ...\n } else if (II->isStr(\"end\")) {\n // ...\n } else\n PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"} | ["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"} | ||
Line 494: | Line 494: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n while (true) {\n case tok::percent:\n if (RHS.Val != 0)\n else if (ValueLive) {\n PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}} | [k]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n // ...\n while (true) {\n // ...\n case tok::percent:\n if (RHS.Val != 0)\n // ...\n else if (ValueLive) {\n PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}} | ||
}, | }, | ||
["err_pp_stringize_not_parameter"]={ | ["err_pp_stringize_not_parameter"]={ | ||
Line 506: | Line 506: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{H,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n // Check for a valid macro arg identifier or __VA_OPT__.\n if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n // If this is assembler-with-cpp mode, we accept random gibberish after\n // the \'#\' because \'#\' is often a comment character. However, change\n // the kind of the token to tok::unknown so that the preprocessor isn\'t\n // confused.\n if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n } else {\n Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}}, | [k]={{H,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n // Check for a valid macro arg identifier or __VA_OPT__.\n if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n // If this is assembler-with-cpp mode, we accept random gibberish after\n // the \'#\' because \'#\' is often a comment character. However, change\n // the kind of the token to tok::unknown so that the preprocessor isn\'t\n // confused.\n if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n // ...\n } else {\n Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"} | ["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"} | ||
Line 521: | Line 521: | ||
[h]=z, | [h]=z, | ||
[e]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers"}, | [e]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers"}, | ||
[k]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n if (!PPOpts->PCHThroughHeader.empty()) {\n if (!File) {\n Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}} | [k]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n // ...\n if (!PPOpts->PCHThroughHeader.empty()) {\n // ...\n if (!File) {\n Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}} | ||
}, | }, | ||
["err_pp_through_header_not_seen"]={ | ["err_pp_through_header_not_seen"]={ | ||
Line 533: | Line 533: | ||
[h]=z, | [h]=z, | ||
[e]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers"}, | [e]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers"}, | ||
[k]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}} | [k]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n // ...\n if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n // ...\n Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n // ...\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}} | ||
}, | }, | ||
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={ | ["err_pp_unclosed_pragma_unsafe_buffer_usage"]={ | ||
Line 545: | Line 545: | ||
[h]=z, | [h]=z, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}}, | [k]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n // ...\n if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n // ...\n Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"} | ["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"} | ||
Line 560: | Line 560: | ||
[h]=z, | [h]=z, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{Q,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (II->isStr(\"begin\")) {\n } else if (II->isStr(\"end\")) {\n if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}}, | [k]={{Q,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n // ...\n if (II->isStr(\"begin\")) {\n // ...\n } else if (II->isStr(\"end\")) {\n if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"} | ["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"} | ||
Line 575: | Line 575: | ||
[h]=z, | [h]=z, | ||
[e]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their"}, | [e]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their"}, | ||
[k]={{Q,1906,"/// PragmaARCCFCodeAuditedHandler -\n/// \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n if (IsBegin) {\n } else {\n // Complain about attempts to leave an audit that doesn\'t exist.\n if (!BeginLoc.isValid()) {\n PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}}, | [k]={{Q,1906,"/// PragmaARCCFCodeAuditedHandler -\n/// \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (IsBegin) {\n // ...\n } else {\n // Complain about attempts to leave an audit that doesn\'t exist.\n if (!BeginLoc.isValid()) {\n PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"} | ["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"} | ||
Line 590: | Line 590: | ||
[h]="Nullability Issue", | [h]="Nullability Issue", | ||
[e]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions."}, | [e]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions."}, | ||
[k]={{Q,1964,"/// PragmaAssumeNonNullHandler -\n/// \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n if (IsBegin) {\n } else {\n // Complain about attempts to leave an audit that doesn\'t exist.\n if (!BeginLoc.isValid()) {\n PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}} | [k]={{Q,1964,"/// PragmaAssumeNonNullHandler -\n/// \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (IsBegin) {\n // ...\n } else {\n // Complain about attempts to leave an audit that doesn\'t exist.\n if (!BeginLoc.isValid()) {\n PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}} | ||
}, | }, | ||
["err_pp_unterminated_conditional"]={ | ["err_pp_unterminated_conditional"]={ | ||
Line 602: | Line 602: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file. Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n // If we are in a #if directive, emit an error.\n while (!ConditionalStack.empty()) {\n if (PP->getCodeCompletionFileLoc() != FileLoc)\n PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}}, | [k]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file. Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n // ...\n // If we are in a #if directive, emit an error.\n while (!ConditionalStack.empty()) {\n if (PP->getCodeCompletionFileLoc() != FileLoc)\n PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"} | ["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"} | ||
Line 617: | Line 617: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n if (it == PoisonReasons.end())\n Diag(Identifier, diag::err_pp_used_poisoned_id);"}}, | [k]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n // ...\n if (it == PoisonReasons.end())\n Diag(Identifier, diag::err_pp_used_poisoned_id);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"} | ["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"} | ||
Line 632: | Line 632: | ||
[h]=z, | [h]=z, | ||
[e]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | [e]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | ||
[k]={{H,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n if (VAOCtx.isVAOptToken(Tok)) {\n // If we\'re already within a VAOPT, emit an error.\n if (VAOCtx.isInVAOpt()) {\n Diag(Tok, diag::err_pp_vaopt_nested_use);"}}, | [k]={{H,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n // ...\n if (VAOCtx.isVAOptToken(Tok)) {\n // If we\'re already within a VAOPT, emit an error.\n if (VAOCtx.isInVAOpt()) {\n Diag(Tok, diag::err_pp_vaopt_nested_use);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"} | ["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"} | ||
Line 647: | Line 647: | ||
[h]=z, | [h]=z, | ||
[e]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly"}, | [e]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly"}, | ||
[k]={{H,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n // If the macro is not defined, this is an error.\n if (!MD) {\n Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{H,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n // If the macro is not defined, this is an error.\n if (!MD) {\n Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{Q,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n if (!II->hasMacroDefinition()) {\n PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{Q,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n/// #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (!II->hasMacroDefinition()) {\n PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}}, | [k]={{H,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n // ...\n // If the macro is not defined, this is an error.\n if (!MD) {\n Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{H,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n // ...\n // If the macro is not defined, this is an error.\n if (!MD) {\n Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{Q,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n // ...\n if (!II->hasMacroDefinition()) {\n PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{Q,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n/// #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (!II->hasMacroDefinition()) {\n PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"} | ["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"} | ||
Line 662: | Line 662: | ||
[h]=p, | [h]=p, | ||
[e]={Yb,1616787805,mb,mb}, | [e]={Yb,1616787805,mb,mb}, | ||
[k]={{w,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n case PPC::BI__builtin_pack_longdouble:\n if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}} | [k]={{w,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\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 674: | Line 674: | ||
[h]=p, | [h]=p, | ||
[e]={ac,1615397021,hb,hb}, | [e]={ac,1615397021,hb,hb}, | ||
[k]={{w,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n case PPC::BI__builtin_ppc_test_data_class: {\n if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}}, | [k]={{w,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_test_data_class: {\n // ...\n if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"} | ["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"} | ||
Line 704: | Line 704: | ||
[h]=p, | [h]=p, | ||
[e]={"cb08f4aa4467",1620530452,Ab,Ab}, | [e]={"cb08f4aa4467",1620530452,Ab,Ab}, | ||
[k]={{G,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n for (auto &Function : Functions) {\n if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}}, | [k]={{G,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n // ...\n for (auto &Function : Functions) {\n // ...\n if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"} | ["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"} | ||
Line 719: | Line 719: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{G,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n for (auto &Function : Functions) {\n if (!FD) {\n Diag(Loc, diag::err_pragma_alloc_text_not_function);"}}, | [k]={{G,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n // ...\n for (auto &Function : Functions) {\n // ...\n if (!FD) {\n Diag(Loc, diag::err_pragma_alloc_text_not_function);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"} | ["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"} | ||
Line 734: | Line 734: | ||
[h]=p, | [h]=p, | ||
[e]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute"}, | [e]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute"}, | ||
[k]={{G,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n if (PragmaAttributeStack.empty()) {\n Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}}, | [k]={{G,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n if (PragmaAttributeStack.empty()) {\n Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"} | ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"} | ||
Line 749: | Line 749: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n do {\n if (isAbstractAttrMatcherRule(PrimaryRule)) {\n } else if (Parens.consumeOpen()) {\n if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{x,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n do {\n if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}}, | [k]={{x,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (isAbstractAttrMatcherRule(PrimaryRule)) {\n // ...\n } else if (Parens.consumeOpen()) {\n if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{x,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"} | ||
Line 764: | Line 764: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // Parse the actual attribute.\n if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n if (AttributeTokens.empty()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}}, | [k]={{x,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Parse the actual attribute.\n if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n // ...\n if (AttributeTokens.empty()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"} | ||
Line 779: | Line 779: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1847,"void Parser::HandlePragmaAttribute() {\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n } else if (Tok.is(tok::kw___attribute)) {\n // Parse the comma-separated list of attributes.\n do {\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}}, | [k]={{x,1847,"void Parser::HandlePragmaAttribute() {\n // ...\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n // ...\n // Parse the comma-separated list of attributes.\n do {\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"} | ||
Line 794: | Line 794: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1872,"void Parser::HandlePragmaAttribute() {\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n } else if (Tok.is(tok::kw___attribute)) {\n } else if (Tok.is(tok::kw___declspec)) {\n } else {\n Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}}, | [k]={{x,1872,"void Parser::HandlePragmaAttribute() {\n // ...\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n // ...\n } else if (Tok.is(tok::kw___declspec)) {\n // ...\n } else {\n Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"} | ||
Line 809: | Line 809: | ||
[h]=v, | [h]=v, | ||
[e]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"}, | [e]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"}, | ||
[k]={{x,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // Parse the optional namespace followed by a period.\n if (Tok.is(tok::identifier)) {\n if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n if (!Tok.is(tok::period)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}}, | [k]={{x,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Parse the optional namespace followed by a period.\n if (Tok.is(tok::identifier)) {\n // ...\n if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n // ...\n if (!Tok.is(tok::period)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"} | ||
Line 824: | Line 824: | ||
[h]=v, | [h]=v, | ||
[e]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute"}, | [e]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute"}, | ||
[k]={{x,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}}, | [k]={{x,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"} | ||
Line 839: | Line 839: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n do {\n if (Name.empty()) {\n Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}}, | [k]={{x,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (Name.empty()) {\n Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"} | ||
Line 869: | Line 869: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1957,"void Parser::HandlePragmaAttribute() {\n // Tokens following an ill-formed attribute will remain in the token stream\n // and must be removed.\n if (Tok.isNot(tok::eof)) {\n Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}}, | [k]={{x,1957,"void Parser::HandlePragmaAttribute() {\n // ...\n // Tokens following an ill-formed attribute will remain in the token stream\n // and must be removed.\n if (Tok.isNot(tok::eof)) {\n Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"} | ||
Line 884: | Line 884: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n } else {\n if (II->isStr(\"push\"))\n else if (II->isStr(\"pop\"))\n else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}} | [k]={{x,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n // ...\n } else {\n // ...\n if (II->isStr(\"push\"))\n // ...\n else if (II->isStr(\"pop\"))\n // ...\n else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}} | ||
}, | }, | ||
["err_pragma_attribute_invalid_matchers"]={ | ["err_pragma_attribute_invalid_matchers"]={ | ||
Line 896: | Line 896: | ||
[h]=p, | [h]=p, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{G,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n if (!Rules.empty()) {\n auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}}, | [k]={{G,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n if (!Rules.empty()) {\n auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"} | ||
Line 911: | Line 911: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1922,"void Parser::HandlePragmaAttribute() {\n if (Tok.isNot(tok::identifier)) {\n createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{x,1930,"void Parser::HandlePragmaAttribute() {\n if (!II->isStr(\"apply_to\")) {\n createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}}, | [k]={{x,1922,"void Parser::HandlePragmaAttribute() {\n // ...\n if (Tok.isNot(tok::identifier)) {\n createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{x,1930,"void Parser::HandlePragmaAttribute() {\n // ...\n if (!II->isStr(\"apply_to\")) {\n createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"} | ||
Line 926: | Line 926: | ||
[h]=p, | [h]=p, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{G,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n for (const auto &Rule : Rules) {\n if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}}, | [k]={{G,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n // ...\n for (const auto &Rule : Rules) {\n // ...\n if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n // ...\n Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"} | ["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"} | ||
Line 941: | Line 941: | ||
[h]=p, | [h]=p, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{G,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n for (const auto &Rule : Rules) {\n if (It != Rules.end()) {\n Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}}, | [k]={{G,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n // ...\n for (const auto &Rule : Rules) {\n // ...\n if (It != Rules.end()) {\n // ...\n Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"} | ["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"} | ||
Line 956: | Line 956: | ||
[h]=v, | [h]=v, | ||
[e]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"}, | [e]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute"}, | ||
[k]={{x,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n if (Info->Namespace) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}}, | [k]={{x,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n if (Info->Namespace) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"} | ["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"} | ||
Line 971: | Line 971: | ||
[h]=p, | [h]=p, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{G,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}}, | [k]={{G,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n // ...\n Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"} | ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"} | ||
Line 986: | Line 986: | ||
[h]=p, | [h]=p, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{G,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n if (PragmaAttributeStack.empty()) {\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{G,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n if (Namespace)\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{G,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n if (Namespace)\n else\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}}, | [k]={{G,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n if (PragmaAttributeStack.empty()) {\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{G,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n // ...\n if (Namespace)\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{G,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n // ...\n if (Namespace)\n // ...\n else\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"} | ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"} | ||
Line 1,001: | Line 1,001: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n do {\n if (!Rule.first) {\n Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}}, | [k]={{x,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (!Rule.first) {\n Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}}, | ||
[o]={ | [o]={ | ||
[Z]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"} | [Z]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"} | ||
Line 1,031: | Line 1,031: | ||
[h]=v, | [h]=v, | ||
[e]={U,1492508507,C,C}, | [e]={U,1492508507,C,C}, | ||
[k]={{x,1903,"void Parser::HandlePragmaAttribute() {\n for (const ParsedAttr &Attribute : Attrs) {\n if (!Attribute.isSupportedByPragmaAttribute()) {\n Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}}, | [k]={{x,1903,"void Parser::HandlePragmaAttribute() {\n // ...\n for (const ParsedAttr &Attribute : Attrs) {\n if (!Attribute.isSupportedByPragmaAttribute()) {\n Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"} | ["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"} | ||
Line 1,046: | Line 1,046: | ||
[h]=v, | [h]=v, | ||
[e]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."}, | [e]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."}, | ||
[k]={{x,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Info->isStr(\"begin\"))\n else if (!Actions.PopForceCUDAHostDevice())\n PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}} | [k]={{x,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Info->isStr(\"begin\"))\n // ...\n else if (!Actions.PopForceCUDAHostDevice())\n PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}} | ||
}, | }, | ||
["err_pragma_clang_section_expected_equal"]={ | ["err_pragma_clang_section_expected_equal"]={ | ||
Line 1,058: | Line 1,058: | ||
[h]=v, | [h]=v, | ||
[e]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section"}, | [e]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section"}, | ||
[k]={{x,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n while (Tok.isNot(tok::eod)) {\n if (Tok.isNot(tok::equal)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}}, | [k]={{x,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (Tok.isNot(tok::equal)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"} | ["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"} | ||
Line 1,073: | Line 1,073: | ||
[h]=v, | [h]=v, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{x,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{x,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}}, | [k]={{x,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{x,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{x,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"} | ["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"} | ||
Line 1,088: | Line 1,088: | ||
[h]=v, | [h]=v, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{x,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Kind == PCK_Unknown) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}}, | [k]={{x,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PCK_Unknown) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"} | ["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"} | ||
Line 1,103: | Line 1,103: | ||
[h]=v, | [h]=v, | ||
[e]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file."}, | [e]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file."}, | ||
[k]={{x,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::comma)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{x,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}}, | [k]={{x,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::comma)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{x,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"} | ["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"} | ||
Line 1,118: | Line 1,118: | ||
[h]=v, | [h]=v, | ||
[e]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section"}, | [e]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section"}, | ||
[k]={{x,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n while (Tok.isNot(tok::eod)) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{x,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n while (Tok.isNot(tok::eod)) {\n if (SecType->isStr(\"bss\"))\n else if (SecType->isStr(\"data\"))\n else if (SecType->isStr(\"rodata\"))\n else if (SecType->isStr(\"relro\"))\n else if (SecType->isStr(\"text\"))\n else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}}, | [k]={{x,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n while (Tok.isNot(tok::eod)) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{x,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (SecType->isStr(\"bss\"))\n // ...\n else if (SecType->isStr(\"data\"))\n // ...\n else if (SecType->isStr(\"rodata\"))\n // ...\n else if (SecType->isStr(\"relro\"))\n // ...\n else if (SecType->isStr(\"text\"))\n // ...\n else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"} | ["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"} | ||
Line 1,148: | Line 1,148: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{x,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{x,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}}, | [k]={{x,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{x,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"} | ["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"} | ||
Line 1,163: | Line 1,163: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{G,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n case PFC_Except:\n if (!isPreciseFPEnabled())\n Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}} | [k]={{G,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_Except:\n if (!isPreciseFPEnabled())\n Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}} | ||
}, | }, | ||
["err_pragma_fc_noprecise_requires_noexcept"]={ | ["err_pragma_fc_noprecise_requires_noexcept"]={ | ||
Line 1,175: | Line 1,175: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{G,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n case PFC_NoPrecise:\n if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}}, | [k]={{G,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_NoPrecise:\n if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"} | ["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"} | ||
Line 1,190: | Line 1,190: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{G,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n case PFC_NoPrecise:\n if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n else if (CurFPFeatures.getAllowFEnvAccess())\n Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}} | [k]={{G,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_NoPrecise:\n if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n // ...\n else if (CurFPFeatures.getAllowFEnvAccess())\n Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}} | ||
}, | }, | ||
["err_pragma_fc_pp_scope"]={ | ["err_pragma_fc_pp_scope"]={ | ||
Line 1,202: | Line 1,202: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{G,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n Diag(Loc, diag::err_pragma_fc_pp_scope);"}}, | [k]={{G,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n // ...\n Diag(Loc, diag::err_pragma_fc_pp_scope);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"} | ["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"} | ||
Line 1,217: | Line 1,217: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{G,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n if (IsEnabled) {\n // Verify Microsoft restriction:\n // You can\'t enable fenv_access unless precise semantics are enabled.\n // Precise semantics can be enabled either by the float_control\n // pragma, or by using the /fp:precise or /fp:strict compiler options\n if (!isPreciseFPEnabled())\n Diag(Loc, diag::err_pragma_fenv_requires_precise);"}} | [k]={{G,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n // ...\n if (IsEnabled) {\n // Verify Microsoft restriction:\n // You can\'t enable fenv_access unless precise semantics are enabled.\n // Precise semantics can be enabled either by the float_control\n // pragma, or by using the /fp:precise or /fp:strict compiler options\n if (!isPreciseFPEnabled())\n Diag(Loc, diag::err_pragma_fenv_requires_precise);"}} | ||
}, | }, | ||
["err_pragma_file_or_compound_scope"]={ | ["err_pragma_file_or_compound_scope"]={ | ||
Line 1,229: | Line 1,229: | ||
[h]=v, | [h]=v, | ||
[e]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control"}, | [e]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control"}, | ||
[k]={{Jb,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::annot_pragma_fp_contract:\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{Jb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::annot_pragma_fp:\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{Jb,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::annot_pragma_fenv_access_ms:\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{Jb,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::annot_pragma_fenv_round:\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{Jb,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::annot_pragma_float_control:\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}}, | [k]={{Jb,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fp_contract:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{Jb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fp:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{Jb,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fenv_access:\n case tok::annot_pragma_fenv_access_ms:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{Jb,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fenv_round:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{Jb,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_float_control:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"} | ["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"} | ||
Line 1,244: | Line 1,244: | ||
[h]=v, | [h]=v, | ||
[e]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control"}, | [e]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control"}, | ||
[k]={{x,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Kind == PFC_Unknown) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Kind == PFC_Unknown) {\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Kind == PFC_Unknown) {\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n } else {\n if (Tok.is(tok::r_paren))\n else if (Tok.isNot(tok::comma)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n | [k]={{x,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (!Tok.isAnyIdentifier()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (PushOnOff == \"on\")\n // ...\n else if (PushOnOff == \"off\") {\n // ...\n } else if (PushOnOff == \"push\") {\n // ...\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::comma)) {\n // ...\n if (!Tok.isAnyIdentifier()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::comma)) {\n // ...\n if (ExpectedPush == \"push\") {\n // ...\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{x,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"} | ["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"} | ||
Line 1,259: | Line 1,259: | ||
[h]=v, | [h]=v, | ||
[e]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp"}, | [e]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp"}, | ||
[k]={{x,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{x,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (FlagKind == TokFPAnnotValue::Contract) {\n if (!AnnotValue->ContractValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (FlagKind == TokFPAnnotValue::Contract) {\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n if (!AnnotValue->ReassociateValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (FlagKind == TokFPAnnotValue::Contract) {\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n if (!AnnotValue->ExceptionsValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (FlagKind == TokFPAnnotValue::Contract) {\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n if (!AnnotValue->EvalMethodValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}}, | [k]={{x,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{x,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n if (!AnnotValue->ContractValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n // ...\n if (!AnnotValue->ReassociateValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n // ...\n if (!AnnotValue->ExceptionsValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{x,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n // ...\n if (!AnnotValue->EvalMethodValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"} | ["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"} | ||
Line 1,274: | Line 1,274: | ||
[h]=v, | [h]=v, | ||
[e]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp"}, | [e]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp"}, | ||
[k]={{x,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{x,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (!FlagKind) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}, | [k]={{x,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{x,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (!FlagKind) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"} | ["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"} | ||
Line 1,289: | Line 1,289: | ||
[h]=v, | [h]=v, | ||
[e]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute."}, | [e]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute."}, | ||
[k]={{x,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n if (!Valid) {\n if (OptionPipelineDisabled) {\n } else {\n Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}, | [k]={{x,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n if (!Valid) {\n if (OptionPipelineDisabled) {\n // ...\n } else {\n Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"} | ["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"} | ||
Line 1,304: | Line 1,304: | ||
[h]=p, | [h]=p, | ||
[e]={"b06b15aa28d0",1402058424,zb,zb}, | [e]={"b06b15aa28d0",1402058424,zb,zb}, | ||
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n for (const auto *I : Attrs) {\n if (PrevAttr)\n S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n for (const auto *I : Attrs) {\n if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}}, | [k]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n // ...\n for (const auto *I : Attrs) {\n // ...\n if (PrevAttr)\n // ...\n S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n // ...\n for (const auto *I : Attrs) {\n // ...\n if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n // ...\n S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"} | ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"} | ||
Line 1,319: | Line 1,319: | ||
[h]=p, | [h]=p, | ||
[e]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints."}, | [e]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints."}, | ||
[k]={{r,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}}, | [k]={{r,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n // ...\n if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"} | ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"} | ||
Line 1,334: | Line 1,334: | ||
[h]=p, | [h]=p, | ||
[e]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints."}, | [e]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints."}, | ||
[k]={{r,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}}, | [k]={{r,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n // ...\n if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"} | ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"} | ||
Line 1,349: | Line 1,349: | ||
[h]=v, | [h]=v, | ||
[e]={"b06b15aa28d0",1402058424,zb,zb}, | [e]={"b06b15aa28d0",1402058424,zb,zb}, | ||
[k]={{x,3515,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{x,3537,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (!OptionValid) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}, | [k]={{x,3515,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{x,3537,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (!OptionValid) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"} | ["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"} | ||
Line 1,364: | Line 1,364: | ||
[h]=v, | [h]=v, | ||
[e]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | [e]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | ||
[k]={{x,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n // Look for vectorize_width(fixed|scalable)\n if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n } else {\n if (Tok.is(tok::comma)) {\n if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}} | [k]={{x,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n // ...\n // Look for vectorize_width(fixed|scalable)\n if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n // ...\n } else {\n // ...\n if (Tok.is(tok::comma)) {\n // ...\n if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}} | ||
}, | }, | ||
["err_pragma_loop_missing_argument"]={ | ["err_pragma_loop_missing_argument"]={ | ||
Line 1,376: | Line 1,376: | ||
[h]=v, | [h]=v, | ||
[e]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE"}, | [e]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE"}, | ||
[k]={{x,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Verify loop hint has an argument.\n if (Toks[0].is(tok::eof)) {\n Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}, | [k]={{x,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Verify loop hint has an argument.\n if (Toks[0].is(tok::eof)) {\n // ...\n Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"} | ["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"} | ||
Line 1,391: | Line 1,391: | ||
[h]=p, | [h]=p, | ||
[e]={"b06b15aa28d0",1402058424,zb,zb}, | [e]={"b06b15aa28d0",1402058424,zb,zb}, | ||
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n // This could be handled automatically by adding a Subjects definition in\n // Attr.td, but that would make the diagnostic behavior worse in this case\n // because the user spells this attribute as a pragma.\n if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}}, | [k]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n // ...\n // This could be handled automatically by adding a Subjects definition in\n // Attr.td, but that would make the diagnostic behavior worse in this case\n // because the user spells this attribute as a pragma.\n if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n // ...\n S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"} | ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"} | ||
Line 1,406: | Line 1,406: | ||
[h]=z, | [h]=z, | ||
[e]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!"}, | [e]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!"}, | ||
[k]={{Q,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n default:\n PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{Q,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (ExpectClosingParen) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{Q,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}}, | [k]={{Q,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n default:\n PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{Q,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (ExpectClosingParen) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{Q,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"} | ["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"} | ||
Line 1,421: | Line 1,421: | ||
[h]=v, | [h]=v, | ||
[e]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma"}, | [e]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma"}, | ||
[k]={{Y,4671,"/// ParseStructUnionBody\n/// struct-contents:\n/// struct-declaration-list\n/// [EXT] empty\n/// [GNU] \"struct-declaration-list\" without terminating \';\'\n/// struct-declaration-list:\n/// struct-declaration\n/// struct-declaration-list struct-declaration\n/// [OBC] \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n // While we still have something to read, read the declarations in the struct.\n while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n if (tok::isPragmaAnnotation(Tok.getKind())) {\n Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{jb,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n default:\n if (tok::isPragmaAnnotation(Tok.getKind())) {\n Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}}, | [k]={{Y,4671,"/// ParseStructUnionBody\n/// struct-contents:\n/// struct-declaration-list\n/// [EXT] empty\n/// [GNU] \"struct-declaration-list\" without terminating \';\'\n/// struct-declaration-list:\n/// struct-declaration\n/// struct-declaration-list struct-declaration\n/// [OBC] \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n // ...\n // While we still have something to read, read the declarations in the struct.\n while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n // ...\n if (tok::isPragmaAnnotation(Tok.getKind())) {\n Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{jb,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n // ...\n default:\n if (tok::isPragmaAnnotation(Tok.getKind())) {\n Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"} | ["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"} | ||
Line 1,436: | Line 1,436: | ||
[h]=v, | [h]=v, | ||
[e]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'."}, | [e]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'."}, | ||
[k]={{x,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{x,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{x,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}}, | [k]={{x,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{x,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{x,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"} | ["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"} | ||
Line 1,451: | Line 1,451: | ||
[h]=v, | [h]=v, | ||
[e]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."}, | [e]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."}, | ||
[k]={{x,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}}, | [k]={{x,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"} | ["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"} | ||
Line 1,466: | Line 1,466: | ||
[h]=v, | [h]=v, | ||
[e]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."}, | [e]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."}, | ||
[k]={{x,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{x,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (II->isStr(\"on\")) {\n } else if (!II->isStr(\"off\")) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}}, | [k]={{x,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{x,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (II->isStr(\"on\")) {\n // ...\n } else if (!II->isStr(\"off\")) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"} | ["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"} | ||
Line 1,481: | Line 1,481: | ||
[h]=p, | [h]=p, | ||
[e]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."}, | [e]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."}, | ||
[k]={{G,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n case POAK_Mac68k:\n // Check if the target supports this.\n if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}}, | [k]={{G,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n // ...\n case POAK_Mac68k:\n // Check if the target supports this.\n if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"} | ["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"} | ||
Line 1,496: | Line 1,496: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{G,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // XL pragma pack does not support identifier syntax.\n if (IsXLPragma && !SlotLabel.empty()) {\n Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}}, | [k]={{G,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // ...\n // XL pragma pack does not support identifier syntax.\n if (IsXLPragma && !SlotLabel.empty()) {\n Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"} | ["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"} | ||
Line 1,511: | Line 1,511: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{G,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n if (Alignment) {\n if (IsXLPragma && *Val == 0) {\n Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}}, | [k]={{G,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // ...\n if (Alignment) {\n // ...\n if (IsXLPragma && *Val == 0) {\n // ...\n Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"} | ["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"} | ||
Line 1,526: | Line 1,526: | ||
[h]=v, | [h]=v, | ||
[e]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations."}, | [e]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations."}, | ||
[k]={{x,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n if (!Valid) {\n if (OptionPipelineDisabled) {\n Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}}, | [k]={{x,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n if (!Valid) {\n if (OptionPipelineDisabled) {\n Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"} | ["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"} | ||
Line 1,541: | Line 1,541: | ||
[h]=v, | [h]=v, | ||
[e]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members"}, | [e]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members"}, | ||
[k]={{x,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Arg->isStr(\"best_case\")) {\n } else {\n if (Arg->isStr(\"full_generality\")) {\n if (Tok.is(tok::comma)) {\n if (!Arg) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{x,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Arg->isStr(\"best_case\")) {\n } else {\n if (Arg) {\n if (Arg->isStr(\"single_inheritance\")) {\n } else if (Arg->isStr(\"multiple_inheritance\")) {\n } else if (Arg->isStr(\"virtual_inheritance\")) {\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}}, | [k]={{x,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Arg->isStr(\"best_case\")) {\n // ...\n } else {\n if (Arg->isStr(\"full_generality\")) {\n if (Tok.is(tok::comma)) {\n // ...\n if (!Arg) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{x,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Arg->isStr(\"best_case\")) {\n // ...\n } else {\n // ...\n if (Arg) {\n if (Arg->isStr(\"single_inheritance\")) {\n // ...\n } else if (Arg->isStr(\"multiple_inheritance\")) {\n // ...\n } else if (Arg->isStr(\"virtual_inheritance\")) {\n // ...\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"} | ["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"} | ||
Line 1,556: | Line 1,556: | ||
[h]=p, | [h]=p, | ||
[e]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | [e]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | ||
[k]={{G,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n if (!VisContext) {\n Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{G,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n if (StartsWithPragma && IsNamespaceEnd) {\n } else if (!StartsWithPragma && !IsNamespaceEnd) {\n Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}}, | [k]={{G,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n if (!VisContext) {\n Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{G,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n // ...\n } else if (!StartsWithPragma && !IsNamespaceEnd) {\n Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"} | ["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"} | ||
Line 1,571: | Line 1,571: | ||
[h]=z, | [h]=z, | ||
[e]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!"}, | [e]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!"}, | ||
[k]={{Q,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{Q,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n if (Tok.isNot(tok::string_literal)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{Q,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n if (Tok.isNot(tok::r_paren)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}} | [k]={{Q,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\n if (Tok.isNot(tok::l_paren)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{Q,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\n if (Tok.isNot(tok::string_literal)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{Q,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\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,583: | Line 1,583: | ||
[h]=p, | [h]=p, | ||
[e]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | [e]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."}, | ||
[k]={{G,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n if (StartsWithPragma && IsNamespaceEnd) {\n Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}}, | [k]={{G,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"} | ["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"} | ||
Line 1,598: | Line 1,598: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{G,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}}, | [k]={{G,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n // ...\n if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"} | ["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"} | ||
Line 1,613: | Line 1,613: | ||
[h]=a, | [h]=a, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n if (!isValidBPFPreserveEnumValueArg(Arg)) {\n kind = diag::err_preserve_enum_value_invalid;"}}, | [k]={{w,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n if (!isValidBPFPreserveEnumValueArg(Arg)) {\n // ...\n kind = diag::err_preserve_enum_value_invalid;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"} | ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"} | ||
Line 1,628: | Line 1,628: | ||
[h]=a, | [h]=a, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n else\n kind = diag::err_preserve_enum_value_not_const;"}} | [k]={{w,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n // ...\n else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n // ...\n else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n // ...\n else\n kind = diag::err_preserve_enum_value_not_const;"}} | ||
}, | }, | ||
["err_preserve_field_info_not_const"]={ | ["err_preserve_field_info_not_const"]={ | ||
Line 1,640: | Line 1,640: | ||
[h]=a, | [h]=a, | ||
[e]={"7c11da0cfd33",1567434909,vb,vb}, | [e]={"7c11da0cfd33",1567434909,vb,vb}, | ||
[k]={{w,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n kind = diag::err_preserve_field_info_not_const;"}}, | [k]={{w,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n kind = diag::err_preserve_field_info_not_const;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"} | ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"} | ||
Line 1,655: | Line 1,655: | ||
[h]=a, | [h]=a, | ||
[e]={"7c11da0cfd33",1567434909,vb,vb}, | [e]={"7c11da0cfd33",1567434909,vb,vb}, | ||
[k]={{w,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n kind = diag::err_preserve_field_info_not_field;"}}, | [k]={{w,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n // ...\n kind = diag::err_preserve_field_info_not_field;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"} | ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"} | ||
Line 1,670: | Line 1,670: | ||
[h]=a, | [h]=a, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n kind = diag::err_preserve_type_info_invalid;"}}, | [k]={{w,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n // ...\n kind = diag::err_preserve_type_info_invalid;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"} | ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"} | ||
Line 1,685: | Line 1,685: | ||
[h]=a, | [h]=a, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n kind = diag::err_preserve_type_info_not_const;"}} | [k]={{w,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n // ...\n else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n // ...\n else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n kind = diag::err_preserve_type_info_not_const;"}} | ||
}, | }, | ||
["err_private_ivar_access"]={ | ["err_private_ivar_access"]={ | ||
Line 1,697: | Line 1,697: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{r,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n if (LookForIvars) {\n if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n // Diagnose the use of an ivar outside of the declaring class.\n if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{P,1445,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n if (!S.getLangOpts().DebuggerSupport) {\n if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}}, | [k]={{r,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n // ...\n if (LookForIvars) {\n // ...\n if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n // ...\n // Diagnose the use of an ivar outside of the declaring class.\n if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{P,1445,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n // ...\n if (!S.getLangOpts().DebuggerSupport) {\n if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"} | ["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"} | ||
Line 1,712: | Line 1,712: | ||
[h]="Modules Issue", | [h]="Modules Issue", | ||
[e]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,"}, | [e]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,"}, | ||
[k]={{kb,2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n/// module-declaration: [C++20]\n/// \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n/// global-module-fragment: [C++2a]\n/// \'module\' \';\' top-level-declaration-seq[opt]\n/// module-declaration: [C++2a]\n/// \'export\'[opt] \'module\' module-name module-partition[opt]\n/// attribute-specifier-seq[opt] \';\'\n/// private-module-fragment: [C++2a]\n/// \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n // Parse a private-module-fragment, if present.\n if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}} | [k]={{kb,2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n/// module-declaration: [C++20]\n/// \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n/// global-module-fragment: [C++2a]\n/// \'module\' \';\' top-level-declaration-seq[opt]\n/// module-declaration: [C++2a]\n/// \'export\'[opt] \'module\' module-name module-partition[opt]\n/// attribute-specifier-seq[opt] \';\'\n/// private-module-fragment: [C++2a]\n/// \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n // ...\n // Parse a private-module-fragment, if present.\n if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n // ...\n ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}} | ||
}, | }, | ||
["err_private_module_fragment_not_module"]={ | ["err_private_module_fragment_not_module"]={ | ||
Line 1,724: | Line 1,724: | ||
[h]="Modules Issue", | [h]="Modules Issue", | ||
[e]={"a5bbbfef156c",1555621974,Hb,Hb}, | [e]={"a5bbbfef156c",1555621974,Hb,Hb}, | ||
[k]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n case Module::ModuleHeaderUnit:\n Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}}, | [k]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n // ...\n case Module::ModuleMapModule:\n case Module::ExplicitGlobalModuleFragment:\n case Module::ImplicitGlobalModuleFragment:\n case Module::ModulePartitionImplementation:\n case Module::ModulePartitionInterface:\n case Module::ModuleHeaderUnit:\n Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"} | ["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"} | ||
Line 1,739: | Line 1,739: | ||
[h]="Modules Issue", | [h]="Modules Issue", | ||
[e]={"a5bbbfef156c",1555621974,Hb,Hb}, | [e]={"a5bbbfef156c",1555621974,Hb,Hb}, | ||
[k]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n case Module::ModuleImplementationUnit:\n Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}}, | [k]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n // ...\n case Module::ModuleImplementationUnit:\n Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"} | ["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"} | ||
Line 1,754: | Line 1,754: | ||
[h]="Modules Issue", | [h]="Modules Issue", | ||
[e]={"a5bbbfef156c",1555621974,Hb,Hb}, | [e]={"a5bbbfef156c",1555621974,Hb,Hb}, | ||
[k]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n case Module::PrivateModuleFragment:\n Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}}, | [k]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n // ...\n case Module::PrivateModuleFragment:\n Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"} | ["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"} | ||
Line 1,769: | Line 1,769: | ||
[h]=a, | [h]=a, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,2441,"#include \"clang/Basic/Builtins.def\"\n case Builtin::BI__builtin_expect_with_probability: {\n if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}}, | [k]={{w,2441,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__builtin_expect_with_probability: {\n // ...\n if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"} | ["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"} | ||
Line 1,784: | Line 1,784: | ||
[h]=a, | [h]=a, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,2453,"#include \"clang/Basic/Builtins.def\"\n case Builtin::BI__builtin_expect_with_probability: {\n if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}}, | [k]={{w,2453,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__builtin_expect_with_probability: {\n // ...\n if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"} | ["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"} | ||
Line 1,799: | Line 1,799: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{W,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n if (!compat) {\n if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}}, | [k]={{W,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n // ...\n if (!compat) {\n // ...\n if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n // ...\n else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"} | ["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"} | ||
Line 1,814: | Line 1,814: | ||
[h]=p, | [h]=p, | ||
[e]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."}, | [e]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."}, | ||
[k]={{P,1398,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (!IV) {\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n } else {\n if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}}, | [k]={{P,1398,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (!IV) {\n // ...\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n // ...\n } else {\n if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"} | ["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"} | ||
Line 1,844: | Line 1,844: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{W,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if (IC) {\n if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{W,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if (IC) {\n } else {\n if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}}, | [k]={{W,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n if (IC) {\n // ...\n if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{W,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n if (IC) {\n // ...\n } else {\n // ...\n if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"} | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"} | ||
Line 1,859: | Line 1,859: | ||
[h]=p, | [h]=p, | ||
[e]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and","Basic support for Microsoft property declarations and"}, | [e]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and","Basic support for Microsoft property declarations and"}, | ||
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n if (DI->getType()->isVariablyModifiedType()) {\n SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}} | [k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n // ...\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,871: | Line 1,871: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{W,1376,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n if (!compat) {\n Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{W,1391,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n if (!compat) {\n } else {\n if (lhsType != rhsType && lhsType->isArithmeticType()) {\n Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}}, | [k]={{W,1376,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\n if (!compat) {\n Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{W,1391,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\n if (!compat) {\n // ...\n } else {\n // ...\n if (lhsType != rhsType && lhsType->isArithmeticType()) {\n Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"} | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"} | ||
Line 1,886: | Line 1,886: | ||
[h]=p, | [h]=p, | ||
[e]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared"}, | [e]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared"}, | ||
[k]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_Unavailable:\n diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}, | [k]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n // ...\n case AR_Unavailable:\n diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"} | ["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"} | ||
Line 1,901: | Line 1,901: | ||
[h]=p, | [h]=p, | ||
[e]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of"}, | [e]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of"}, | ||
[k]={{pb,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}}, | [k]={{pb,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n // ...\n if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"} | ["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"} | ||
Line 1,916: | Line 1,916: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{P,1549,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n // id, with and without qualifiers.\n if (OT->isObjCId()) {\n return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{P,1604,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n // \'Class\', unqualified only.\n if (OT->isObjCClass()) {\n return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{pb,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{pb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}}, | [k]={{P,1549,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n // ...\n // id, with and without qualifiers.\n if (OT->isObjCId()) {\n // ...\n return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{P,1604,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n // ...\n // \'Class\', unqualified only.\n if (OT->isObjCClass()) {\n // ...\n return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{pb,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{pb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n // ...\n return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"} | ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"} | ||
Line 1,931: | Line 1,931: | ||
[h]=p, | [h]=p, | ||
[e]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up"}, | [e]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up"}, | ||
[k]={{pb,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}}, | [k]={{pb,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"} | ["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"} | ||
Line 1,946: | Line 1,946: | ||
[h]=p, | [h]=p, | ||
[e]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific"}, | [e]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific"}, | ||
[k]={{pb,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n } else {\n diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}}, | [k]={{pb,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n // ...\n if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n // ...\n } else {\n diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"} | ["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"} | ||
Line 1,961: | Line 1,961: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n // Do a normal method lookup first.\n if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n if (setter->isPropertyAccessor() && warn)\n if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}}, | [k]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n // ...\n // Do a normal method lookup first.\n if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n if (setter->isPropertyAccessor() && warn)\n if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n // ...\n if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"} | ["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"} | ||
Line 1,976: | Line 1,976: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{W,638,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n if (T->isArrayType() || T->isFunctionType()) {\n Diag(AtLoc, diag::err_property_type) << T;"}}, | [k]={{W,638,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n // ...\n if (T->isArrayType() || T->isFunctionType()) {\n Diag(AtLoc, diag::err_property_type) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"} | ["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"} | ||
Line 1,991: | Line 1,991: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{P,1449,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n if (!S.getLangOpts().DebuggerSupport) {\n if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}}, | [k]={{P,1449,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n // ...\n if (!S.getLangOpts().DebuggerSupport) {\n if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n // ...\n } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n // ...\n S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"} | ["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"} | ||
Line 2,006: | Line 2,006: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{eb,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n if (PDecl->getIdentifier() == PName) {\n Diag(Ploc, diag::err_protocol_has_circular_dependency);"}}, | [k]={{eb,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n // ...\n for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n if (PDecl->getIdentifier() == PName) {\n Diag(Ploc, diag::err_protocol_has_circular_dependency);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"} | ["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"} | ||
Line 2,021: | Line 2,021: | ||
[h]=p, | [h]=p, | ||
[e]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"}, | [e]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"}, | ||
[k]={{W,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n // Diagnose incompability.\n {\n auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}}, | [k]={{W,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n // ...\n // Diagnose incompability.\n {\n // ...\n auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"} | ["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"} | ||
Line 2,036: | Line 2,036: | ||
[h]=p, | [h]=p, | ||
[e]={"ad8a336b4037",1252085800,Eb,Eb}, | [e]={"ad8a336b4037",1252085800,Eb,Eb}, | ||
[k]={{J,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n else {\n Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}}, | [k]={{J,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n // ...\n else {\n Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"} | ["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"} | ||
Line 2,051: | Line 2,051: | ||
[h]=p, | [h]=p, | ||
[e]={"ad8a336b4037",1252085800,Eb,Eb}, | [e]={"ad8a336b4037",1252085800,Eb,Eb}, | ||
[k]={{r,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n if (getLangOpts().CPlusPlus) {\n // If this is a pseudo-destructor expression, build the call immediately.\n if (isa<CXXPseudoDestructorExpr>(Fn)) {\n if (!ArgExprs.empty()) {\n Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}}, | [k]={{r,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // If this is a pseudo-destructor expression, build the call immediately.\n if (isa<CXXPseudoDestructorExpr>(Fn)) {\n if (!ArgExprs.empty()) {\n // ...\n Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"} | ["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"} | ||
Line 2,066: | Line 2,066: | ||
[h]=p, | [h]=p, | ||
[e]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for"}, | [e]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for"}, | ||
[k]={{J,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n } else if (!T) {\n Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{J,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n if (!T) {\n Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}}, | [k]={{J,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n // ...\n if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n // ...\n if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n // ...\n } else if (!T) {\n Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{J,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n // ...\n if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n // ...\n if (!T) {\n Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"} | ["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"} | ||
Line 2,081: | Line 2,081: | ||
[h]=p, | [h]=p, | ||
[e]={"ad8a336b4037",1252085800,Eb,Eb}, | [e]={"ad8a336b4037",1252085800,Eb,Eb}, | ||
[k]={{J,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // C++ [expr.pseudo]p2:\n // [...] The cv-unqualified versions of the object type and of the type\n // designated by the pseudo-destructor-name shall be the same type.\n if (DestructedTypeInfo) {\n if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n // Detect dot pseudo destructor calls on pointer objects, e.g.:\n // Foo *foo;\n // foo.~Foo();\n if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n } else {\n Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{J,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // C++ [expr.pseudo]p2:\n // [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n // form\n //\n // ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n //\n // shall designate the same scalar type.\n if (ScopeTypeInfo) {\n if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}}, | [k]={{J,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n // C++ [expr.pseudo]p2:\n // [...] The cv-unqualified versions of the object type and of the type\n // designated by the pseudo-destructor-name shall be the same type.\n if (DestructedTypeInfo) {\n // ...\n if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n // Detect dot pseudo destructor calls on pointer objects, e.g.:\n // Foo *foo;\n // foo.~Foo();\n if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n // ...\n } else {\n Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{J,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n // C++ [expr.pseudo]p2:\n // [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n // form\n //\n // ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n //\n // shall designate the same scalar type.\n if (ScopeTypeInfo) {\n // ...\n if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"} | ["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"} | ||
Line 2,111: | Line 2,111: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{A,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n if (D.getCXXScopeSpec().isSet() && !Invalid) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}} | [k]={{A,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n // ...\n if (D.getCXXScopeSpec().isSet() && !Invalid) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}} | ||
}, | }, | ||
["err_qualified_friend_def"]={ | ["err_qualified_friend_def"]={ | ||
Line 2,123: | Line 2,123: | ||
[h]=p, | [h]=p, | ||
[e]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow"}, | [e]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow"}, | ||
[k]={{A,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n } else if (SS.isInvalid() || !SS.isSet()) {\n } else if (!SS.getScopeRep()->isDependent()) {\n if (D.isFunctionDefinition()) {\n SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{A,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n } else if (SS.isInvalid() || !SS.isSet()) {\n } else if (!SS.getScopeRep()->isDependent()) {\n } else {\n if (D.isFunctionDefinition()) {\n Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}}, | [k]={{A,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // ...\n if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n // ...\n } else if (SS.isInvalid() || !SS.isSet()) {\n // ...\n } else if (!SS.getScopeRep()->isDependent()) {\n // ...\n if (D.isFunctionDefinition()) {\n // ...\n SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{A,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // ...\n if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n // ...\n } else if (SS.isInvalid() || !SS.isSet()) {\n // ...\n } else if (!SS.getScopeRep()->isDependent()) {\n // ...\n } else {\n if (D.isFunctionDefinition()) {\n // ...\n Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"} | ["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"} | ||
Line 2,138: | Line 2,138: | ||
[h]=p, | [h]=p, | ||
[e]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a"}, | [e]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a"}, | ||
[k]={{u,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{s,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n // For a qualified friend declaration (with no explicit marker to indicate\n // that a template specialization was intended), note all (template and\n // non-template) candidates.\n if (QualifiedFriend && Candidates.empty()) {\n Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}} | [k]={{u,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n // ...\n unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{s,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n // ...\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 2,150: | Line 2,150: | ||
[h]=p, | [h]=p, | ||
[e]={"7c11da0cfd33",1567434909,vb,vb}, | [e]={"7c11da0cfd33",1567434909,vb,vb}, | ||
[k]={{K,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}}, | [k]={{K,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n // ...\n Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"} | ["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"} | ||
Line 2,165: | Line 2,165: | ||
[h]=p, | [h]=p, | ||
[e]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!"}, | [e]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!"}, | ||
[k]={{P,683,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n if (SS.isSet()) {\n if (!isa<TypeDecl>(DC)) {\n SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}}, | [k]={{P,683,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n // ...\n if (SS.isSet()) {\n // ...\n if (!isa<TypeDecl>(DC)) {\n SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"} | ["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"} | ||
Line 2,180: | Line 2,180: | ||
[h]=p, | [h]=p, | ||
[e]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access"}, | [e]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access"}, | ||
[k]={{P,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression. Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}}, | [k]={{P,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression. Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n // ...\n SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"} | ["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"} | ||
Line 2,195: | Line 2,195: | ||
[h]=p, | [h]=p, | ||
[e]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or"}, | [e]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or"}, | ||
[k]={{P,1331,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (!SS.isEmpty() && !SS.isInvalid()) {\n S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{P,1494,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n if (!SS.isEmpty() && !SS.isInvalid()) {\n S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}}, | [k]={{P,1331,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (!SS.isEmpty() && !SS.isInvalid()) {\n S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{P,1494,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n if (!SS.isEmpty() && !SS.isInvalid()) {\n S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"} | ["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"} | ||
Line 2,210: | Line 2,210: | ||
[h]=p, | [h]=p, | ||
[e]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from"}, | [e]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from"}, | ||
[k]={{eb,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}} | [k]={{eb,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // ...\n // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}} | ||
}, | }, | ||
["err_qualified_param_declarator"]={ | ["err_qualified_param_declarator"]={ | ||
Line 2,222: | Line 2,222: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}}, | [k]={{u,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n // ...\n // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"} | ["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"} | ||
Line 2,252: | Line 2,252: | ||
[h]=p, | [h]=p, | ||
[e]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a"}, | [e]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a"}, | ||
[k]={{T,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n if (RangeVarType->isDependentType()) {\n } else if (!BeginDeclStmt.get()) {\n if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n } else {\n if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n // If the range is being built from an array parameter, emit a\n // a diagnostic that it is being treated as a pointer.\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}}, | [k]={{T,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n // ...\n if (RangeVarType->isDependentType()) {\n // ...\n } else if (!BeginDeclStmt.get()) {\n // ...\n if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n // ...\n } else {\n // ...\n if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n // If the range is being built from an array parameter, emit a\n // a diagnostic that it is being treated as a pointer.\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n // ...\n if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"} | ["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"} | ||
Line 2,267: | Line 2,267: | ||
[h]=z, | [h]=z, | ||
[e]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals."}, | [e]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals."}, | ||
[k]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n if (CurPtr[PrefixLen] != \'(\') {\n if (!isLexingRawMode()) {\n if (PrefixLen == 16) {\n Diag(PrefixEnd, diag::err_raw_delim_too_long);"}}, | [k]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n // ...\n // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n if (CurPtr[PrefixLen] != \'(\') {\n if (!isLexingRawMode()) {\n // ...\n if (PrefixLen == 16) {\n Diag(PrefixEnd, diag::err_raw_delim_too_long);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"} | ["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"} | ||
Line 2,282: | Line 2,282: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{r,14373,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_InvalidMessageExpression:\n DiagID = diag::err_readonly_message_assignment;"}}, | [k]={{r,14373,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_InvalidMessageExpression:\n DiagID = diag::err_readonly_message_assignment;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"} | ["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"} | ||
Line 2,297: | Line 2,297: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}}, | [k]={{r,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n // ...\n S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"} | ["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"} | ||
Line 2,312: | Line 2,312: | ||
[h]=p, | [h]=p, | ||
[e]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL"}, | [e]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL"}, | ||
[k]={{u,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n do {\n for (const auto *FD : RD->fields()) {\n // OpenCL v1.2 s6.9.p:\n // Arguments to kernel functions that are declared to be a struct or union\n // do not allow OpenCL objects to be passed as elements of the struct or\n // union. This restriction was lifted in OpenCL v2.0 with the introduction\n // of SVM.\n if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}}, | [k]={{u,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n // ...\n do {\n // ...\n for (const auto *FD : RD->fields()) {\n // ...\n // OpenCL v1.2 s6.9.p:\n // Arguments to kernel functions that are declared to be a struct or union\n // do not allow OpenCL objects to be passed as elements of the struct or\n // union. This restriction was lifted in OpenCL v2.0 with the introduction\n // of SVM.\n if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"} | ["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"} | ||
Line 2,327: | Line 2,327: | ||
[h]=p, | [h]=p, | ||
[e]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition"}, | [e]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition"}, | ||
[k]={{r,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n if (Param->hasUnparsedDefaultArg()) {\n // If we\'ve already cleared out the location for the default argument,\n // that means we\'re parsing it right now.\n if (!UnparsedDefaultArgLocs.count(Param)) {\n Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n if (Inst.isAlreadyInstantiating()) {\n Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}}, | [k]={{r,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n if (Param->hasUnparsedDefaultArg()) {\n // ...\n // If we\'ve already cleared out the location for the default argument,\n // that means we\'re parsing it right now.\n if (!UnparsedDefaultArgLocs.count(Param)) {\n Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n // ...\n if (Inst.isAlreadyInstantiating()) {\n Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"} | ["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"} | ||
Line 2,342: | Line 2,342: | ||
[h]=p, | [h]=p, | ||
[e]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class."}, | [e]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class."}, | ||
[k]={{eb,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n if (declaresSameEntity(PrevDecl, IDecl)) {\n Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}}, | [k]={{eb,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n // ...\n if (declaresSameEntity(PrevDecl, IDecl)) {\n Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"} | ["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"} | ||
Line 2,357: | Line 2,357: | ||
[h]=p, | [h]=p, | ||
[e]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree"}, | [e]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree"}, | ||
[k]={{u,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}, | [k]={{u,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n // ...\n S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"} | ||
Line 2,372: | Line 2,372: | ||
[h]=p, | [h]=p, | ||
[e]={Yb,1616787805,mb,mb}, | [e]={Yb,1616787805,mb,mb}, | ||
[k]={{u,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}}, | [k]={{u,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n // ...\n Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"} | ["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"} | ||
Line 2,387: | Line 2,387: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n if (getLangOpts().CPlusPlus) {\n Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n | [k]={{u,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n // ...\n for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n // ...\n if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n // ...\n } else {\n // ...\n unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{u,3044,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n // ...\n for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n // ...\n if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n // ...\n } else {\n // ...\n if (Diag == diag::err_redefinition)"},{u,4683,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n // ...\n // FIXME: The test for external storage here seems wrong? We still\n // need to check for mismatches.\n if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n // ...\n Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{u,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n // ...\n } else {\n Diag(New->getLocation(), diag::err_redefinition) << New;"},{u,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n // ...\n if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n // ...\n else\n Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{u,17369,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // If this is a use of a previous tag, or if the tag is already declared\n // in the same scope (so that the definition/declaration completes or\n // rementions the tag), reuse the decl.\n if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n if (!Invalid) {\n // ...\n // Diagnose attempts to redefine a tag.\n if (TUK == TUK_Definition) {\n if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n // ...\n if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n // ...\n } else if (!IsExplicitSpecializationAfterInstantiation) {\n // A redeclaration in function prototype scope in C isn\'t\n // visible elsewhere, so merely issue a warning.\n if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n // ...\n else\n Diag(NameLoc, diag::err_redefinition) << Name;"},{u,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n // ...\n if (PrevDecl) {\n // ...\n if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n if (isa<EnumConstantDecl>(PrevDecl))\n // ...\n else\n Diag(IdLoc, diag::err_redefinition) << Id;"},{A,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n // Build the BindingDecls.\n for (auto &B : D.getDecompositionDeclarator().bindings()) {\n // ...\n if (!Previous.empty()) {\n // ...\n Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{A,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration. Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n // ...\n // C++03 [namespace.udecl]p8:\n // C++0x [namespace.udecl]p10:\n // A using-declaration is a declaration and can therefore be used\n // repeatedly where (and only where) multiple declarations are\n // allowed.\n //\n // That\'s in non-member contexts.\n if (!CurContext->getRedeclContext()->isRecord()) {\n // A dependent qualifier outside a class can only ever resolve to an\n // enumeration type. Therefore it conflicts with any other non-type\n // declaration in the same scope.\n // FIXME: How should we check for dependent type-type conflicts at block\n // scope?\n if (Qual->isDependent() && !HasTypenameKeyword) {\n for (auto *D : Prev) {\n if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n // ...\n Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{A,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // ...\n } else if (isVisible(PrevDecl)) {\n unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{A,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n // ...\n if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n // ...\n if (isDeclInScope(PrevDecl, CurContext, S)) {\n Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{r,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n // ...\n for (const OMPIteratorData &D : Data) {\n // ...\n if (S) {\n // ...\n if (!Previous.empty()) {\n // ...\n Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{s,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n // ...\n if (PrevClassTemplate) {\n // ...\n // Check for redefinition of this class template.\n if (TUK == TUK_Definition) {\n if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n // ...\n if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n // ...\n } else {\n Diag(NameLoc, diag::err_redefinition) << Name;"},{s,8904,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n // ...\n // Check that this isn\'t a redefinition of this specialization.\n if (TUK == TUK_Definition) {\n // ...\n if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n // ...\n } else if (Def) {\n // ...\n Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{s,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n // ...\n if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n // ...\n // If PrevDecl was a definition and D is also a definition, diagnose.\n // This happens in cases like:\n //\n // template<typename T, typename U>\n // struct Outer {\n // template<typename X> struct Inner;\n // template<> struct Inner<T> {};\n // template<> struct Inner<U> {};\n // };\n //\n // Outer<int, int> outer; // error: the explicit specializations of Inner\n // // have the same signature.\n if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"} | ["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"} | ||
Line 2,402: | Line 2,402: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{s,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n if (!IsSame) {\n Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}} | [k]={{s,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n // ...\n if (!IsSame) {\n Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}} | ||
}, | }, | ||
["err_redefinition_different_kind"]={ | ["err_redefinition_different_kind"]={ | ||
Line 2,414: | Line 2,414: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n if (!Old) {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n if (!Old) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n } else {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n if (!Old) {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,17460,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n | [k]={{u,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n // ...\n if (!Old) {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // ...\n if (!Old) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n // ...\n } else {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n // ...\n if (!Old) {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{u,17460,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n // ...\n } else {\n // ...\n Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{A,11434,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n // ...\n if (II) {\n // ...\n if (PrevNS) {\n // ...\n } else if (PrevDecl) {\n // ...\n Diag(Loc, diag::err_redefinition_different_kind) << II;"},{A,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration. Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n // ...\n // C++03 [namespace.udecl]p8:\n // C++0x [namespace.udecl]p10:\n // A using-declaration is a declaration and can therefore be used\n // repeatedly where (and only where) multiple declarations are\n // allowed.\n //\n // That\'s in non-member contexts.\n if (!CurContext->getRedeclContext()->isRecord()) {\n // A dependent qualifier outside a class can only ever resolve to an\n // enumeration type. Therefore it conflicts with any other non-type\n // declaration in the same scope.\n // FIXME: How should we check for dependent type-type conflicts at block\n // scope?\n if (Qual->isDependent() && !HasTypenameKeyword) {\n for (auto *D : Prev) {\n if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n // ...\n Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{A,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n // ...\n if (TemplateParamLists.size()) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (!OldDecl && !Invalid) {\n Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{A,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // ...\n } else if (isVisible(PrevDecl)) {\n unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{eb,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n // ...\n if (declaresSameEntity(PrevDecl, IDecl)) {\n // ...\n } else {\n // ...\n if (PrevDecl && !SuperClassDecl) {\n // ...\n // This handles the following case:\n //\n // typedef int SuperClass;\n // @interface MyClass : SuperClass {} @end\n //\n if (!SuperClassDecl) {\n Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{eb,991,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{eb,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{eb,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n // ...\n if (SuperClassname) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{eb,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n // ...\n for (unsigned i = 0; i != NumElts; ++i) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n // ...\n if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{s,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n // ...\n if (PrevClassTemplate) {\n // ...\n } else if (PrevDecl) {\n // ...\n Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{s,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n // ...\n if (!OldConcept) {\n // ...\n Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"} | ["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"} | ||
Line 2,429: | Line 2,429: | ||
[h]=p, | [h]=p, | ||
[e]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"}, | [e]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"}, | ||
[k]={{A,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n if (PrevR.isSingleResult()) {\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // We already have an alias with the same name that points to the same\n // namespace; check that it matches.\n if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n } else if (isVisible(PrevDecl)) {\n Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}}, | [k]={{A,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // We already have an alias with the same name that points to the same\n // namespace; check that it matches.\n if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n // ...\n } else if (isVisible(PrevDecl)) {\n Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"} | ["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"} | ||
Line 2,444: | Line 2,444: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}, | [k]={{u,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n // ...\n S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"} | ||
Line 2,459: | Line 2,459: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{A,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n if (TemplateParamLists.size()) {\n if (!Previous.empty()) {\n if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}}, | [k]={{u,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n // ...\n if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n // ...\n Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{A,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n // ...\n if (TemplateParamLists.size()) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n // ...\n if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n // ...\n Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"} | ["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"} | ||
Line 2,474: | Line 2,474: | ||
[h]=p, | [h]=p, | ||
[e]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern"}, | [e]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern"}, | ||
[k]={{u,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}}, | [k]={{u,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n // ...\n if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"} | ["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"} | ||
Line 2,489: | Line 2,489: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n if (PrevDecl) {\n if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n if (isa<EnumConstantDecl>(PrevDecl))\n Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}}, | [k]={{u,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n // ...\n if (PrevDecl) {\n // ...\n if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n if (isa<EnumConstantDecl>(PrevDecl))\n Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"} | ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"} | ||
Line 2,519: | Line 2,519: | ||
[h]=p, | [h]=p, | ||
[e]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a"}, | [e]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a"}, | ||
[k]={{u,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n if (NewType->isVariablyModifiedType()) {\n Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}}, | [k]={{u,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n // ...\n if (NewType->isVariablyModifiedType()) {\n // ...\n Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"} | ["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"} | ||
Line 2,534: | Line 2,534: | ||
[h]=p, | [h]=p, | ||
[e]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well. Radar 7438948.","Disallow captured arrays in blocks as well. Radar 7438948."}, | [e]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well. Radar 7438948.","Disallow captured arrays in blocks as well. Radar 7438948."}, | ||
[k]={{r,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n // Blocks are not allowed to capture arrays, excepting OpenCL.\n // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n // (decayed to pointers).\n if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n if (BuildAndDiagnose) {\n S.Diag(Loc, diag::err_ref_array_type);"}}, | [k]={{r,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n // ...\n // Blocks are not allowed to capture arrays, excepting OpenCL.\n // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n // (decayed to pointers).\n if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n if (BuildAndDiagnose) {\n S.Diag(Loc, diag::err_ref_array_type);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"} | ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"} | ||
Line 2,549: | Line 2,549: | ||
[h]=p, | [h]=p, | ||
[e]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets"}, | [e]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets"}, | ||
[k]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{r,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n/// - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n/// - else capture it in the DeclContext that maps to the\n/// *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n // Diagnose ODR-use of host global variables in device functions.\n // Reference of device global variables in host functions is allowed\n // through shadow variables therefore it is not diagnosed.\n if (SemaRef.LangOpts.CUDAIsDevice) {\n SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}}, | [k]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n // ...\n SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{r,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n/// - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n/// - else capture it in the DeclContext that maps to the\n/// *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n // ...\n if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n // ...\n if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n // Diagnose ODR-use of host global variables in device functions.\n // Reference of device global variables in host functions is allowed\n // through shadow variables therefore it is not diagnosed.\n if (SemaRef.LangOpts.CUDAIsDevice) {\n SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"} | ["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"} | ||
Line 2,564: | Line 2,564: | ||
[h]=p, | [h]=p, | ||
[e]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers."}, | [e]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers."}, | ||
[k]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n if (IsDeviceOrConstantVar || IsSharedVar) {\n } else {\n if (InitFn) {\n if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}}, | [k]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n // ...\n if (IsDeviceOrConstantVar || IsSharedVar) {\n // ...\n } else {\n // ...\n if (InitFn) {\n // ...\n if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"} | ["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"} | ||
Line 2,579: | Line 2,579: | ||
[h]=p, | [h]=p, | ||
[e]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture "}, | [e]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture "}, | ||
[k]={{r,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // Prohibit structs with flexible array members too.\n // We cannot capture what is in the tail end of the struct.\n if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n if (Diagnose) {\n if (IsBlock)\n S.Diag(Loc, diag::err_ref_flexarray_type);"}}, | [k]={{r,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // ...\n // Prohibit structs with flexible array members too.\n // We cannot capture what is in the tail end of the struct.\n if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n if (Diagnose) {\n if (IsBlock)\n S.Diag(Loc, diag::err_ref_flexarray_type);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"} | ["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"} | ||
Line 2,594: | Line 2,594: | ||
[h]=p, | [h]=p, | ||
[e]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization."}, | [e]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization."}, | ||
[k]={{M,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_UserConversionOverloadFailed:\n case OR_Ambiguous:\n FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}}, | [k]={{M,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_Ambiguous:\n FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"} | ["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"} | ||
Line 2,609: | Line 2,609: | ||
[h]=p, | [h]=p, | ||
[e]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a"}, | [e]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a"}, | ||
[k]={{r,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n // Make sure that we\'re referring to a value.\n if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}}, | [k]={{r,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n // ...\n // Make sure that we\'re referring to a value.\n if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"} | ["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"} | ||
Line 2,624: | Line 2,624: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{A,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n if (IsMethod) {\n if (MD->getRefQualifier() == RQ_RValue) {\n Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}}, | [k]={{A,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n // ...\n if (IsMethod) {\n // ...\n if (MD->getRefQualifier() == RQ_RValue) {\n Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"} | ["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"} | ||
Line 2,639: | Line 2,639: | ||
[h]=p, | [h]=p, | ||
[e]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: "}, | [e]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: "}, | ||
[k]={{A,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true. In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n if (FTI.hasRefQualifier()) {\n Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}, | [k]={{A,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true. In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n // ...\n if (FTI.hasRefQualifier()) {\n Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"} | ["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"} | ||
Line 2,654: | Line 2,654: | ||
[h]=p, | [h]=p, | ||
[e]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: "}, | [e]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: "}, | ||
[k]={{A,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid. Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n if (FTI.hasRefQualifier()) {\n Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}, | [k]={{A,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid. Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n // ...\n if (FTI.hasRefQualifier()) {\n Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"} | ["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"} | ||
Line 2,669: | Line 2,669: | ||
[h]=p, | [h]=p, | ||
[e]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot"}, | [e]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot"}, | ||
[k]={{gb,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}}, | [k]={{gb,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n // ...\n if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n // ...\n Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"} | ["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"} | ||
Line 2,684: | Line 2,684: | ||
[h]=p, | [h]=p, | ||
[e]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks."}, | [e]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks."}, | ||
[k]={{r,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n if (Diagnose) {\n S.Diag(Loc, diag::err_ref_vm_type);"}}, | [k]={{r,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // ...\n // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n if (Diagnose) {\n S.Diag(Loc, diag::err_ref_vm_type);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"} | ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"} | ||
Line 2,711: | Line 2,711: | ||
[h]=Lb, | [h]=Lb, | ||
[e]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters"}, | [e]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters"}, | ||
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n if (Code.size() == 1) {\n // Property setters can\'t be extracted.\n if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n if (!PRE->isMessagingGetter())\n return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}} | [k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n // ...\n if (Code.size() == 1) {\n // ...\n // Property setters can\'t be extracted.\n if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n if (!PRE->isMessagingGetter())\n return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}} | ||
}, | }, | ||
["err_refactor_extract_simple_expression"]={ | ["err_refactor_extract_simple_expression"]={ | ||
Line 2,723: | Line 2,723: | ||
[h]=Lb, | [h]=Lb, | ||
[e]={"7fe441b20d2d",1508865525,Nb,Nb}, | [e]={"7fe441b20d2d",1508865525,Nb,Nb}, | ||
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n if (Code.size() == 1) {\n // Avoid extraction of simple literals and references.\n if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}} | [k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n // ...\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,735: | Line 2,735: | ||
[h]=Lb, | [h]=Lb, | ||
[e]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics"}, | [e]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics"}, | ||
[k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n // When one of the requirements is not satisfied, invoke should return a\n // valid error.\n {\n EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}} | [k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n // ...\n // When one of the requirements is not satisfied, invoke should return a\n // valid error.\n {\n // ...\n EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}} | ||
}, | }, | ||
["err_refactor_selection_invalid_ast"]={ | ["err_refactor_selection_invalid_ast"]={ | ||
Line 2,747: | Line 2,747: | ||
[h]=Lb, | [h]=Lb, | ||
[e]={"7fe441b20d2d",1508865525,Nb,Nb}, | [e]={"7fe441b20d2d",1508865525,Nb,Nb}, | ||
[k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n if (!Selection)\n return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n if (!CodeRange)\n return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}} | [k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n // ...\n if (!Selection)\n return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n // ...\n if (!CodeRange)\n return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}} | ||
}, | }, | ||
["err_refactor_selection_no_symbol"]={ | ["err_refactor_selection_no_symbol"]={ | ||
Line 2,759: | Line 2,759: | ||
[h]=Lb, | [h]=Lb, | ||
[e]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics"}, | [e]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics"}, | ||
[k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n if (!ND)\n return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}} | [k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n // ...\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,771: | Line 2,771: | ||
[h]=p, | [h]=p, | ||
[e]={Tb,1260399737,lb,lb}, | [e]={Tb,1260399737,lb,lb}, | ||
[k]={{M,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ReferenceInitDropsQualifiers: {\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{M,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ReferenceInitDropsQualifiers: {\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n else if (DroppedQualifiers.hasQualifiers())\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{M,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ReferenceInitDropsQualifiers: {\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n else if (DroppedQualifiers.hasQualifiers())\n else\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}}, | [k]={{M,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitDropsQualifiers: {\n // ...\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{M,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitDropsQualifiers: {\n // ...\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n // ...\n else if (DroppedQualifiers.hasQualifiers())\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{M,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitDropsQualifiers: {\n // ...\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n // ...\n else if (DroppedQualifiers.hasQualifiers())\n // ...\n else\n // ...\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"} | ["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"} | ||
Line 2,786: | Line 2,786: | ||
[h]=p, | [h]=p, | ||
[e]={Tb,1260399737,lb,lb}, | [e]={Tb,1260399737,lb,lb}, | ||
[k]={{M,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ReferenceInitFailed:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}}, | [k]={{M,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitFailed:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"} | ["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"} | ||
Line 2,801: | Line 2,801: | ||
[h]=p, | [h]=p, | ||
[e]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences."}, | [e]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences."}, | ||
[k]={{M,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ReferenceBindingToInitList:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}, | [k]={{M,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceBindingToInitList:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"} | ["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"} | ||
Line 2,816: | Line 2,816: | ||
[h]=p, | [h]=p, | ||
[e]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries"}, | [e]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries"}, | ||
[k]={{M,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ReferenceAddrspaceMismatchTemporary:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}}, | [k]={{M,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceAddrspaceMismatchTemporary:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"} | ["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"} | ||
Line 2,831: | Line 2,831: | ||
[h]=p, | [h]=p, | ||
[e]={Tb,1260399737,lb,lb}, | [e]={Tb,1260399737,lb,lb}, | ||
[k]={{M,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_NonConstLValueReferenceBindingToBitfield: {\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}}, | [k]={{M,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToBitfield: {\n // ...\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"} | ["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"} | ||
Line 2,846: | Line 2,846: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{M,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_NonConstLValueReferenceBindingToMatrixElement:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}, | [k]={{M,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToMatrixElement:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"} | ["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"} | ||
Line 2,861: | Line 2,861: | ||
[h]=p, | [h]=p, | ||
[e]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element."}, | [e]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element."}, | ||
[k]={{M,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_NonConstLValueReferenceBindingToVectorElement:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}, | [k]={{M,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToVectorElement:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"} | ["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"} | ||
Line 2,876: | Line 2,876: | ||
[h]="Lambda Issue", | [h]="Lambda Issue", | ||
[e]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures."}, | [e]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures."}, | ||
[k]={{cc,1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Init.isUsable()) {\n } else {\n // C++11 [expr.prim.lambda]p8:\n // If a lambda-capture includes a capture-default that is &, the\n // identifiers in the lambda-capture shall not be preceded by &.\n // If a lambda-capture includes a capture-default that is =, [...]\n // each identifier it contains shall be preceded by &.\n if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}}, | [k]={{cc,1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n // ...\n if (C->Init.isUsable()) {\n // ...\n } else {\n // ...\n // C++11 [expr.prim.lambda]p8:\n // If a lambda-capture includes a capture-default that is &, the\n // identifiers in the lambda-capture shall not be preceded by &.\n // If a lambda-capture includes a capture-default that is =, [...]\n // each identifier it contains shall be preceded by &.\n if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"} | ["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"} | ||
Line 2,891: | Line 2,891: | ||
[h]=p, | [h]=p, | ||
[e]={Tb,1260399737,lb,lb}, | [e]={Tb,1260399737,lb,lb}, | ||
[k]={{M,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_TooManyInitsForReference:\n // FIXME: Customize for the initialized entity?\n if (Args.empty()) {\n } else // FIXME: diagnostic below could be better!\n S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}} | [k]={{M,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_TooManyInitsForReference:\n // FIXME: Customize for the initialized entity?\n if (Args.empty()) {\n // ...\n } else // FIXME: diagnostic below could be better!\n S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}} | ||
}, | }, | ||
["err_reference_pipe_type"]={ | ["err_reference_pipe_type"]={ | ||
Line 2,903: | Line 2,903: | ||
[h]=p, | [h]=p, | ||
[e]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support"}, | [e]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support"}, | ||
[k]={{u,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n for (const ParmVarDecl *Param : NewFD->parameters()) {\n // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n // types.\n if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}}, | [k]={{u,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n for (const ParmVarDecl *Param : NewFD->parameters()) {\n // ...\n // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n // types.\n if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n // ...\n if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"} | ["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"} | ||
Line 2,918: | Line 2,918: | ||
[h]=p, | [h]=p, | ||
[e]={"349636d2bfc3",1575555459,Ob,Ob}, | [e]={"349636d2bfc3",1575555459,Ob,Ob}, | ||
[k]={{r,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n // [expr.prim.id]p4\n // A program that refers explicitly or implicitly to a function with a\n // trailing requires-clause whose constraint-expression is not satisfied,\n // other than to declare it, is ill-formed. [...]\n //\n // See if this is a function with constraints that need to be satisfied.\n // Check this before deducing the return type, as it might instantiate the\n // definition.\n if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n if (!Satisfaction.IsSatisfied) {\n Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}}, | [k]={{r,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n // [expr.prim.id]p4\n // A program that refers explicitly or implicitly to a function with a\n // trailing requires-clause whose constraint-expression is not satisfied,\n // other than to declare it, is ill-formed. [...]\n //\n // See if this is a function with constraints that need to be satisfied.\n // Check this before deducing the return type, as it might instantiate the\n // definition.\n if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n // ...\n if (!Satisfaction.IsSatisfied) {\n Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"} | ["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"} | ||
Line 2,933: | Line 2,933: | ||
[h]=p, | [h]=p, | ||
[e]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG"}, | [e]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG"}, | ||
[k]={{r,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}}, | [k]={{r,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n // ...\n S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"} | ["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"} | ||
Line 2,948: | Line 2,948: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{K,2270,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n // C++ [dcl.ref]p1:\n // A declarator that specifies the type \"reference to cv void\"\n // is ill-formed.\n if (T->isVoidType()) {\n Diag(Loc, diag::err_reference_to_void);"}}, | [k]={{K,2270,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n // ...\n // C++ [dcl.ref]p1:\n // A declarator that specifies the type \"reference to cv void\"\n // is ill-formed.\n if (T->isVoidType()) {\n Diag(Loc, diag::err_reference_to_void);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"} | ["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"} | ||
Line 2,963: | Line 2,963: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{u,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // Provide a specific diagnostic for uninitialized variable\n // definitions with reference type.\n if (Type->isReferenceType()) {\n Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}}, | [k]={{u,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n // Provide a specific diagnostic for uninitialized variable\n // definitions with reference type.\n if (Type->isReferenceType()) {\n Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"} | ["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"} | ||
Line 2,993: | Line 2,993: | ||
[h]=p, | [h]=p, | ||
[e]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a"}, | [e]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a"}, | ||
[k]={{u,3831,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // Merge regparm attribute.\n if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n if (NewTypeInfo.getHasRegParm()) {\n Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}}, | [k]={{u,3831,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // ...\n // Merge regparm attribute.\n if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n if (NewTypeInfo.getHasRegParm()) {\n Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"} | ["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"} | ||
Line 3,008: | Line 3,008: | ||
[h]=a, | [h]=a, | ||
[e]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name."}, | [e]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name."}, | ||
[k]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}} | [k]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n // ...\n if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}} | ||
}, | }, | ||
["err_repeat_attribute"]={ | ["err_repeat_attribute"]={ | ||
Line 3,020: | Line 3,020: | ||
[h]=p, | [h]=p, | ||
[e]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override."}, | [e]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override."}, | ||
[k]={{V,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}}, | [k]={{V,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"} | ["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"} | ||
Line 3,035: | Line 3,035: | ||
[h]=p, | [h]=p, | ||
[e]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization."}, | [e]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization."}, | ||
[k]={{u,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // Check whether the initializer is sufficiently constant.\n if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n if (HasConstInit) {\n } else if (var->isConstexpr()) {\n } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}}, | [k]={{u,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n // Check whether the initializer is sufficiently constant.\n if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n // ...\n if (HasConstInit) {\n // ...\n } else if (var->isConstexpr()) {\n // ...\n } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n // ...\n Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"} | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"} | ||
Line 3,050: | Line 3,050: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{Y,6714,"PastIdentifier:\n while (true) {\n if (Tok.is(tok::l_paren)) {\n } else if (Tok.is(tok::l_square)) {\n } else if (Tok.isRegularKeywordAttribute()) {\n } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n Diag(Tok, diag::err_requires_clause_inside_parens);"}}, | [k]={{Y,6714,"PastIdentifier:\n // ...\n while (true) {\n if (Tok.is(tok::l_paren)) {\n // ...\n } else if (Tok.is(tok::l_square)) {\n // ...\n } else if (Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n // ...\n Diag(Tok, diag::err_requires_clause_inside_parens);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"} | ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"} | ||
Line 3,065: | Line 3,065: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{jb,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n // Did the user swap the trailing return type and requires clause?\n if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n if (!TrailingReturnType.isInvalid()) {\n Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}}, | [k]={{jb,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n // ...\n // Did the user swap the trailing return type and requires clause?\n if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n // ...\n if (!TrailingReturnType.isInvalid()) {\n Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"} | ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"} | ||
Line 3,080: | Line 3,080: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{Y,7375,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed. If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n/// parameter-type-list: [C99 6.7.5]\n/// parameter-list\n/// parameter-list \',\' \'...\'\n/// [C++] parameter-list \'...\'\n///\n/// parameter-list: [C99 6.7.5]\n/// parameter-declaration\n/// parameter-list \',\' parameter-declaration\n///\n/// parameter-declaration: [C99 6.7.5]\n/// declaration-specifiers declarator\n/// [C++] declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11] initializer-clause\n/// [GNU] declaration-specifiers declarator attributes\n/// declaration-specifiers abstract-declarator[opt]\n/// [C++] declaration-specifiers abstract-declarator[opt]\n/// \'=\' assignment-expression\n/// [GNU] declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n do {\n if (Tok.is(tok::kw_requires)) {\n Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{jb,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n if (!D.isDeclarationOfFunction()) {\n Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}}, | [k]={{Y,7375,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed. If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n/// parameter-type-list: [C99 6.7.5]\n/// parameter-list\n/// parameter-list \',\' \'...\'\n/// [C++] parameter-list \'...\'\n///\n/// parameter-list: [C99 6.7.5]\n/// parameter-declaration\n/// parameter-list \',\' parameter-declaration\n///\n/// parameter-declaration: [C99 6.7.5]\n/// declaration-specifiers declarator\n/// [C++] declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11] initializer-clause\n/// [GNU] declaration-specifiers declarator attributes\n/// declaration-specifiers abstract-declarator[opt]\n/// [C++] declaration-specifiers abstract-declarator[opt]\n/// \'=\' assignment-expression\n/// [GNU] declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n // ...\n do {\n // ...\n if (Tok.is(tok::kw_requires)) {\n // ...\n Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{jb,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n // ...\n if (!D.isDeclarationOfFunction()) {\n Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"} | ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"} | ||
Line 3,095: | Line 3,095: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{nb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n if (Tok.is(tok::r_brace)) {\n } else {\n while (!Tok.is(tok::r_brace)) {\n case tok::l_brace: {\n if (!isTypeConstraintAnnotation()) {\n Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}}, | [k]={{nb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n case tok::l_brace: {\n // ...\n if (!isTypeConstraintAnnotation()) {\n Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}}, | ||
[o]={ | [o]={ | ||
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"} | [Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"} | ||
Line 3,110: | Line 3,110: | ||
[h]=v, | [h]=v, | ||
[e]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions."}, | [e]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions."}, | ||
[k]={{nb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n if (Tok.is(tok::r_brace)) {\n } else {\n while (!Tok.is(tok::r_brace)) {\n default: {\n if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}}, | [k]={{nb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n default: {\n // ...\n if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}}, | ||
[o]={ | [o]={ | ||
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"} | [Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"} | ||
Line 3,125: | Line 3,125: | ||
[h]=p, | [h]=p, | ||
[e]={Qb,1576172311,cb,cb}, | [e]={Qb,1576172311,cb,cb}, | ||
[k]={{J,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n for (ParmVarDecl *Param : LocalParameters) {\n if (Param->hasDefaultArg())\n Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}}, | [k]={{J,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n // ...\n for (ParmVarDecl *Param : LocalParameters) {\n if (Param->hasDefaultArg())\n // ...\n Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}}, | ||
[o]={ | [o]={ | ||
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"} | [Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"} | ||
Line 3,140: | Line 3,140: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{nb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n if (Tok.is(tok::r_brace)) {\n } else {\n while (!Tok.is(tok::r_brace)) {\n case tok::l_brace: {\n if (!TryConsumeToken(tok::arrow))\n Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}}, | [k]={{nb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n case tok::l_brace: {\n // ...\n if (!TryConsumeToken(tok::arrow))\n // ...\n Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}}, | ||
[o]={ | [o]={ | ||
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"} | [Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"} | ||
Line 3,155: | Line 3,155: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{nb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n if (Tok.is(tok::l_paren)) {\n if (!Tok.is(tok::r_paren)) {\n if (EllipsisLoc.isValid())\n Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}}, | [k]={{nb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n if (!Tok.is(tok::r_paren)) {\n // ...\n if (EllipsisLoc.isValid())\n Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}}, | ||
[o]={ | [o]={ | ||
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"} | [Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"} | ||
Line 3,170: | Line 3,170: | ||
[h]=p, | [h]=p, | ||
[e]={Qb,1576172311,cb,cb}, | [e]={Qb,1576172311,cb,cb}, | ||
[k]={{r,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}}, | [k]={{r,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n // ...\n Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"} | ["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"} | ||
Line 3,185: | Line 3,185: | ||
[h]=v, | [h]=v, | ||
[e]={wb,1570627358,X,X}, | [e]={wb,1570627358,X,X}, | ||
[k]={{nb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n if (Tok.is(tok::r_brace)) {\n } else {\n while (!Tok.is(tok::r_brace)) {\n default: {\n // User may have tried to put some compound requirement stuff here\n if (Tok.is(tok::kw_noexcept)) {\n Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}}, | [k]={{nb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n default: {\n // ...\n // User may have tried to put some compound requirement stuff here\n if (Tok.is(tok::kw_noexcept)) {\n Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}}, | ||
[o]={ | [o]={ | ||
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"} | [Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"} | ||
Line 3,200: | Line 3,200: | ||
[h]=p, | [h]=p, | ||
[e]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute"}, | [e]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute"}, | ||
[k]={{eb,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n // An interface can subclass another interface with a\n // objc_subclassing_restricted attribute when it has that attribute as\n // well (because of interfaces imported from Swift). Therefore we have\n // to check if we can subclass in the implementation as well.\n if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{eb,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}}, | [k]={{eb,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n // ...\n if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n // ...\n if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n // ...\n if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n // An interface can subclass another interface with a\n // objc_subclassing_restricted attribute when it has that attribute as\n // well (because of interfaces imported from Swift). Therefore we have\n // to check if we can subclass in the implementation as well.\n if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{eb,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n // ...\n if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n // ...\n } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n // ...\n } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"} | ["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"} | ||
Line 3,215: | Line 3,215: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{M,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n case LK_StmtExprResult:\n if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n } else if (isa<BlockExpr>(L)) {\n Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}}, | [k]={{M,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n // ...\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n // ...\n case LK_Return:\n case LK_StmtExprResult:\n if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n // ...\n } else if (isa<BlockExpr>(L)) {\n Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"} | ["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"} | ||
Line 3,230: | Line 3,230: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{T,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n if (!Throw) {\n if (!AtCatchParent)\n return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}}, | [k]={{T,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n // ...\n if (!Throw) {\n // ...\n if (!AtCatchParent)\n return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"} | ["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"} | ||
Line 3,245: | Line 3,245: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{T,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n // Otherwise, verify that this result type matches the previous one. We are\n // pickier with blocks than for normal functions because we don\'t have GCC\n // compatibility to worry about here.\n if (FnRetType->isDependentType()) {\n } else if (FnRetType->isVoidType()) {\n if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n else {\n Diag(ReturnLoc, diag::err_return_block_has_expr);"}} | [k]={{T,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n // ...\n // Otherwise, verify that this result type matches the previous one. We are\n // pickier with blocks than for normal functions because we don\'t have GCC\n // compatibility to worry about here.\n if (FnRetType->isDependentType()) {\n // ...\n } else if (FnRetType->isVoidType()) {\n if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n // ...\n else {\n Diag(ReturnLoc, diag::err_return_block_has_expr);"}} | ||
}, | }, | ||
["err_return_in_captured_stmt"]={ | ["err_return_in_captured_stmt"]={ | ||
Line 3,257: | Line 3,257: | ||
[h]=p, | [h]=p, | ||
[e]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements"}, | [e]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements"}, | ||
[k]={{T,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}}, | [k]={{T,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n // ...\n if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n // ...\n } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"} | ["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"} | ||
Line 3,272: | Line 3,272: | ||
[h]=p, | [h]=p, | ||
[e]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ..."}, | [e]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ..."}, | ||
[k]={{A,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n for (Stmt *SubStmt : S->children()) {\n if (isa<ReturnStmt>(SubStmt))\n Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}}, | [k]={{A,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n for (Stmt *SubStmt : S->children()) {\n // ...\n if (isa<ReturnStmt>(SubStmt))\n Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}}, | ||
[o]={ | [o]={ | ||
[Sb]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"} | [Sb]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"} | ||
Line 3,287: | Line 3,287: | ||
[h]="Coroutines Issue", | [h]="Coroutines Issue", | ||
[e]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."}, | [e]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."}, | ||
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n // [stmt.return.coroutine]p1:\n // A coroutine shall not enclose a return statement ([stmt.return]).\n if (Fn->FirstReturnLoc.isValid()) {\n Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}}, | [k]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n // ...\n // [stmt.return.coroutine]p1:\n // A coroutine shall not enclose a return statement ([stmt.return]).\n if (Fn->FirstReturnLoc.isValid()) {\n // ...\n Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"} | ["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"} | ||
Line 3,302: | Line 3,302: | ||
[h]=p, | [h]=p, | ||
[e]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers."}, | [e]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers."}, | ||
[k]={{T,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}}, | [k]={{T,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n // ...\n Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"} | ["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"} | ||
Line 3,317: | Line 3,317: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{u,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().OpenCL) {\n if (AddressSpace != LangAS::Default) {\n Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{u,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().HLSL) {\n if (AddressSpace != LangAS::Default) {\n Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{cc,876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n if (ParamInfo.getNumTypeObjects() == 0) {\n } else {\n if (ExplicitResultType && S.getLangOpts().HLSL) {\n if (!RetTy.isNull()) {\n if (AddressSpace != LangAS::Default)\n S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}}, | [k]={{u,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().OpenCL) {\n // ...\n if (AddressSpace != LangAS::Default) {\n Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{u,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().HLSL) {\n // ...\n if (AddressSpace != LangAS::Default) {\n Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{cc,876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n // ...\n if (ParamInfo.getNumTypeObjects() == 0) {\n // ...\n } else {\n // ...\n if (ExplicitResultType && S.getLangOpts().HLSL) {\n // ...\n if (!RetTy.isNull()) {\n // ...\n if (AddressSpace != LangAS::Default)\n S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"} | ["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"} | ||
Line 3,332: | Line 3,332: | ||
[h]=v, | [h]=v, | ||
[e]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to"}, | [e]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to"}, | ||
[k]={{bc,1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n // Diagnose this situation as appropriate.\n if (!ObjCGenericList) {\n if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n else if (Tok.is(tok::greaterequal))\n DiagId = diag::err_right_angle_bracket_equal_needs_space;"}}, | [k]={{bc,1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n // ...\n // Diagnose this situation as appropriate.\n if (!ObjCGenericList) {\n // ...\n if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n // ...\n else if (Tok.is(tok::greaterequal))\n DiagId = diag::err_right_angle_bracket_equal_needs_space;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"} | ["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"} | ||
Line 3,347: | Line 3,347: | ||
[h]=a, | [h]=a, | ||
[e]={ac,1615397021,hb,hb}, | [e]={ac,1615397021,hb,hb}, | ||
[k]={{w,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}}, | [k]={{w,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n // ...\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"} | ["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"} | ||
Line 3,362: | Line 3,362: | ||
[h]=a, | [h]=a, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{w,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // Check if each required feature is included\n for (StringRef F : ReqFeatures) {\n if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{w,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n if (RequireV && !TI.hasFeature(\"v\"))\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}}, | [k]={{w,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n // Check if each required feature is included\n for (StringRef F : ReqFeatures) {\n // ...\n if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n // ...\n Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{w,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_m:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_m:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_m:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_m:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:\n case RISCVVector::BI__builtin_rvv_vmulh_vv:\n case RISCVVector::BI__builtin_rvv_vmulh_vx:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_m:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_m:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:\n case RISCVVector::BI__builtin_rvv_vsmul_vv:\n case RISCVVector::BI__builtin_rvv_vsmul_vx:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_m:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_m:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n // ...\n if (RequireV && !TI.hasFeature(\"v\"))\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"} | ["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"} | ||
Line 3,377: | Line 3,377: | ||
[h]=a, | [h]=a, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{w,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n // least zve64x\n if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{w,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{w,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{w,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{w,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // Given that caller already checked isRVVType() before calling this function,\n // if we don\'t have at least zve32x supported, then we need to emit error.\n if (!TI.hasFeature(\"zve32x\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}}, | [k]={{w,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n // least zve64x\n if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{w,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{w,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{w,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{w,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n // Given that caller already checked isRVVType() before calling this function,\n // if we don\'t have at least zve32x supported, then we need to emit error.\n if (!TI.hasFeature(\"zve32x\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"} | ["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"} | ||
Line 3,392: | Line 3,392: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{pb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n if (!IFace) {\n // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n // property reference.\n if (receiverNamePtr->isStr(\"super\")) {\n if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n if (auto classDecl = CurMethod->getClassInterface()) {\n if (CurMethod->isInstanceMethod()) {\n if (SuperType.isNull()) {\n Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{pb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n if (SuperTy.isNull()) {\n Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}}, | [k]={{pb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n // ...\n if (!IFace) {\n // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n // property reference.\n if (receiverNamePtr->isStr(\"super\")) {\n if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n if (auto classDecl = CurMethod->getClassInterface()) {\n // ...\n if (CurMethod->isInstanceMethod()) {\n if (SuperType.isNull()) {\n // ...\n Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{pb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n // ...\n if (SuperTy.isNull()) {\n // ...\n Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"} | ["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"} | ||
Line 3,407: | Line 3,407: | ||
[h]=a, | [h]=a, | ||
[e]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers"}, | [e]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers"}, | ||
[k]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n if (Args.hasArg(options::OPT_shared))\n D.Diag(diag::err_roptr_cannot_build_shared);"}} | [k]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\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 3,419: | Line 3,419: | ||
[h]=a, | [h]=a, | ||
[e]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers"}, | [e]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers"}, | ||
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n if (HasRoptr) {\n // The data sections option is on by default on AIX. We only need to error\n // out when -fno-data-sections is specified explicitly to turn off data\n // sections.\n if (DataSectionsTurnedOff)\n D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n // Since the storage mapping class is specified per csect,\n // without using data sections, it is less effective to use read-only\n // pointers. Using read-only pointers may cause other RO variables in the\n // same csect to become RW when the linker acts upon `-bforceimprw`;\n // therefore, we require that separate data sections\n // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n // data-sections since we have not found reasons to do otherwise that\n // overcome the user surprise of not respecting the setting.\n if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n Diags.Report(diag::err_roptr_requires_data_sections);"}} | [k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n // ...\n if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n // ...\n if (HasRoptr) {\n // The data sections option is on by default on AIX. We only need to error\n // out when -fno-data-sections is specified explicitly to turn off data\n // sections.\n if (DataSectionsTurnedOff)\n D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n // ...\n if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n // ...\n // Since the storage mapping class is specified per csect,\n // without using data sections, it is less effective to use read-only\n // pointers. Using read-only pointers may cause other RO variables in the\n // same csect to become RW when the linker acts upon `-bforceimprw`;\n // therefore, we require that separate data sections\n // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n // data-sections since we have not found reasons to do otherwise that\n // overcome the user surprise of not respecting the setting.\n if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n Diags.Report(diag::err_roptr_requires_data_sections);"}} | ||
}, | }, | ||
["err_rotation_argument_to_cadd"]={ | ["err_rotation_argument_to_cadd"]={ | ||
Line 3,431: | Line 3,431: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{w,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n for (auto &I : ImmChecks) {\n case SVETypeFlags::ImmCheckComplexRot90_270:\n if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}}, | [k]={{w,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n // ...\n for (auto &I : ImmChecks) {\n // ...\n case SVETypeFlags::ImmCheckComplexRot90_270:\n if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"} | ["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"} | ||
Line 3,446: | Line 3,446: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{w,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n for (auto &I : ImmChecks) {\n case SVETypeFlags::ImmCheckComplexRotAll90:\n if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}}, | [k]={{w,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n // ...\n for (auto &I : ImmChecks) {\n // ...\n case SVETypeFlags::ImmCheckComplexRotAll90:\n if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"} | ["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"} | ||
Line 3,461: | Line 3,461: | ||
[h]=p, | [h]=p, | ||
[e]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications."}, | [e]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications."}, | ||
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n if (const PointerType *PT = T->getAs<PointerType>()) {\n } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n if (RT->isRValueReferenceType()) {\n Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}}, | [k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n // ...\n if (const PointerType *PT = T->getAs<PointerType>()) {\n // ...\n } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n // ...\n if (RT->isRValueReferenceType()) {\n // ...\n Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}}, | ||
[o]={ | [o]={ | ||
[Sb]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"} | [Sb]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"} | ||
Line 3,476: | Line 3,476: | ||
[h]=p, | [h]=p, | ||
[e]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions."}, | [e]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions."}, | ||
[k]={{M,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n case SK_OCLSamplerInit: {\n // Case 1\n if (Entity.isParameterKind()) {\n if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}} | [k]={{M,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n // ...\n case SK_OCLSamplerInit: {\n // ...\n // Case 1\n if (Entity.isParameterKind()) {\n if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}} | ||
}, | }, | ||
["err_sampler_initializer_not_integer"]={ | ["err_sampler_initializer_not_integer"]={ | ||
Line 3,488: | Line 3,488: | ||
[h]=p, | [h]=p, | ||
[e]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer"}, | [e]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer"}, | ||
[k]={{M,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n case SK_OCLSamplerInit: {\n // Case 1\n if (Entity.isParameterKind()) {\n } else {\n if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}}, | [k]={{M,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n // ...\n case SK_OCLSamplerInit: {\n // ...\n // Case 1\n if (Entity.isParameterKind()) {\n // ...\n } else {\n // ...\n if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"} | ["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"} | ||
Line 3,503: | Line 3,503: | ||
[h]=v, | [h]=v, | ||
[e]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a","Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"}, | [e]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a","Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"}, | ||
[k]={{Y,4873,"/// ParseEnumSpecifier\n/// enum-specifier: [C99 6.7.2.2]\n/// \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU] \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n/// \'}\' attributes[opt]\n/// [MS] \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n/// \'}\'\n/// \'enum\' identifier\n/// [GNU] \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\' \'}\'\n///\n/// enum-head: [C++11]\n/// enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n/// enum-key attribute-specifier-seq[opt] nested-name-specifier\n/// identifier enum-base[opt]\n///\n/// enum-key: [C++11]\n/// \'enum\'\n/// \'enum\' \'class\'\n/// \'enum\' \'struct\'\n///\n/// enum-base: [C++11]\n/// \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++] \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n if (!Name && ScopedEnumKWLoc.isValid()) {\n Diag(Tok, diag::err_scoped_enum_missing_identifier);"}}, | [k]={{Y,4873,"/// ParseEnumSpecifier\n/// enum-specifier: [C99 6.7.2.2]\n/// \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU] \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n/// \'}\' attributes[opt]\n/// [MS] \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n/// \'}\'\n/// \'enum\' identifier\n/// [GNU] \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\' \'}\'\n///\n/// enum-head: [C++11]\n/// enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n/// enum-key attribute-specifier-seq[opt] nested-name-specifier\n/// identifier enum-base[opt]\n///\n/// enum-key: [C++11]\n/// \'enum\'\n/// \'enum\' \'class\'\n/// \'enum\' \'struct\'\n///\n/// enum-base: [C++11]\n/// \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++] \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n if (!Name && ScopedEnumKWLoc.isValid()) {\n // ...\n Diag(Tok, diag::err_scoped_enum_missing_identifier);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"} | ["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"} | ||
Line 3,518: | Line 3,518: | ||
[h]=p, | [h]=p, | ||
[e]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension.","Implement the __builtin_call_with_static_chain GNU extension."}, | [e]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension.","Implement the __builtin_call_with_static_chain GNU extension."}, | ||
[k]={{w,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n if (!ChainResult.get()->getType()->isPointerType()) {\n S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}}, | [k]={{w,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n // ...\n if (!ChainResult.get()->getType()->isPointerType()) {\n S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/call-with-static-chain.c"]={"clang/test/Sema/call-with-static-chain.c:10:3: error: second argument to __builtin_call_with_static_chain must be of pointer type"} | ["clang/test/Sema/call-with-static-chain.c"]={"clang/test/Sema/call-with-static-chain.c:10:3: error: second argument to __builtin_call_with_static_chain must be of pointer type"} | ||
Line 3,533: | Line 3,533: | ||
[h]=p, | [h]=p, | ||
[e]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg"}, | [e]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg"}, | ||
[k]={{r,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n if (!TInfo->getType()->isDependentType()) {\n if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}}, | [k]={{r,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // ...\n if (!TInfo->getType()->isDependentType()) {\n // ...\n if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"} | ["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"} | ||
Line 3,548: | Line 3,548: | ||
[h]=p, | [h]=p, | ||
[e]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg"}, | [e]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg"}, | ||
[k]={{r,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n if (!TInfo->getType()->isDependentType()) {\n if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}}, | [k]={{r,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // ...\n if (!TInfo->getType()->isDependentType()) {\n if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"} | ["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"} | ||
Line 3,563: | Line 3,563: | ||
[h]=p, | [h]=p, | ||
[e]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas","[MS-ABI] Add support for #pragma section and related pragmas"}, | [e]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas","[MS-ABI] Add support for #pragma section and related pragmas"}, | ||
[k]={{G,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{G,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n if (SectionIt != Context.SectionInfos.end()) {\n if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}}, | [k]={{G,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n // ...\n Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{G,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n // ...\n if (SectionIt != Context.SectionInfos.end()) {\n // ...\n if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"} | ["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"} | ||
Line 3,578: | Line 3,578: | ||
[h]=a, | [h]=a, | ||
[e]={"1c0675e155b9",1303952914,ub,ub}, | [e]={"1c0675e155b9",1303952914,ub,ub}, | ||
[k]={{kb,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{kb,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{kb,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{w,2470,"#include \"clang/Basic/Builtins.def\"\n case Builtin::BI_exception_code:\n if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}}, | [k]={{kb,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{kb,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{kb,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{w,2470,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__exception_code:\n case Builtin::BI_exception_code:\n if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"} | ["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"} | ||
Line 3,593: | Line 3,593: | ||
[h]=a, | [h]=a, | ||
[e]={"1c0675e155b9",1303952914,ub,ub}, | [e]={"1c0675e155b9",1303952914,ub,ub}, | ||
[k]={{kb,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{kb,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{kb,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{w,2476,"#include \"clang/Basic/Builtins.def\"\n case Builtin::BI_exception_info:\n if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}}, | [k]={{kb,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{kb,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{kb,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{w,2476,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__exception_info:\n case Builtin::BI_exception_info:\n if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"} | ["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"} | ||
Line 3,608: | Line 3,608: | ||
[h]=a, | [h]=a, | ||
[e]={"1c0675e155b9",1303952914,ub,ub}, | [e]={"1c0675e155b9",1303952914,ub,ub}, | ||
[k]={{kb,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{kb,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{kb,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n if (getLangOpts().Borland) {\n PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}}, | [k]={{kb,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{kb,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{kb,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"} | ["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"} | ||
Line 3,623: | Line 3,623: | ||
[h]=a, | [h]=a, | ||
[e]={"1c0675e155b9",1303952914,ub,ub}, | [e]={"1c0675e155b9",1303952914,ub,ub}, | ||
[k]={{Jb,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n/// \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n/// seh-except-block\n/// seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n } else if (Tok.is(tok::kw___finally)) {\n } else {\n return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}}, | [k]={{Jb,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n/// \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n/// seh-except-block\n/// seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n // ...\n if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n // ...\n } else if (Tok.is(tok::kw___finally)) {\n // ...\n } else {\n return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"} | ["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"} | ||
Line 3,638: | Line 3,638: | ||
[h]="Coroutines Issue", | [h]="Coroutines Issue", | ||
[e]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch","[coroutines] Wrap the body of the coroutine in try-catch"}, | [e]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch","[coroutines] Wrap the body of the coroutine in try-catch"}, | ||
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n // Since the body of the coroutine will be wrapped in try-catch, it will\n // be incompatible with SEH __try if present in a function.\n if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}}, | [k]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n // ...\n // Since the body of the coroutine will be wrapped in try-catch, it will\n // be incompatible with SEH __try if present in a function.\n if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:34:3: error: cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"} | ["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:34:3: error: cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"} | ||
Line 3,653: | Line 3,653: | ||
[h]=p, | [h]=p, | ||
[e]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality","SEH: Track users of __try so we can pick a per-func EH personality"}, | [e]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality","SEH: Track users of __try so we can pick a per-func EH personality"}, | ||
[k]={{T,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n if (FD)\n else\n Diag(TryLoc, diag::err_seh_try_outside_functions);"}}, | [k]={{T,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n // ...\n if (FD)\n // ...\n else\n Diag(TryLoc, diag::err_seh_try_outside_functions);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"} | ["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"} | ||
Line 3,668: | Line 3,668: | ||
[h]=p, | [h]=p, | ||
[e]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try","[SEH] Add 32-bit lowering code for __try"}, | [e]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try","[SEH] Add 32-bit lowering code for __try"}, | ||
[k]={{T,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n // Reject __try on unsupported targets.\n if (!Context.getTargetInfo().isSEHTrySupported())\n Diag(TryLoc, diag::err_seh_try_unsupported);"}} | [k]={{T,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n // ...\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,680: | Line 3,680: | ||
[h]=p, | [h]=p, | ||
[e]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120.","Properly handle explicit constructors in list-initialization. Fixes PR12120."}, | [e]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120.","Properly handle explicit constructors in list-initialization. Fixes PR12120."}, | ||
[k]={{M,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_ExplicitConstructor: {\n S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}}, | [k]={{M,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ExplicitConstructor: {\n S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"} | ["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"} | ||
Line 3,695: | Line 3,695: | ||
[h]=p, | [h]=p, | ||
[e]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in","ObjectiveC. ObjectiveC\'s collection selector expression in"}, | [e]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in","ObjectiveC. ObjectiveC\'s collection selector expression in"}, | ||
[k]={{T,2345,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n if (First) {\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n } else {\n if (FirstType.isConstQualified())\n Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}}, | [k]={{T,2345,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n // ...\n if (First) {\n // ...\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n // ...\n } else {\n // ...\n if (FirstType.isConstQualified())\n Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"} | ["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"} | ||
Line 3,710: | Line 3,710: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{T,2340,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n if (First) {\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n } else {\n if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}}, | [k]={{T,2340,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n // ...\n if (First) {\n // ...\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n // ...\n } else {\n // ...\n if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"} | ["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"} | ||
Line 3,725: | Line 3,725: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{T,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n if (First) {\n if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}}, | [k]={{T,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n // ...\n if (First) {\n // ...\n if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"} | ["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"} | ||
Line 3,740: | Line 3,740: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{W,2446,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n if (!property->isReadOnly() && SetterMethod) {\n if (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}} | [k]={{W,2446,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n // ...\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,752: | Line 3,752: | ||
[h]=p, | [h]=p, | ||
[e]={Vb,1620118562,fb,fb}, | [e]={Vb,1620118562,fb,fb}, | ||
[k]={{G,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n if (getLangOpts().ApproxFunc)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{G,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n if (getLangOpts().AllowFPReassoc)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{G,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n if (getLangOpts().AllowRecip)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{G,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n if (IsEnabled) {\n if (Reason != -1)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}} | [k]={{G,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n // ...\n if (getLangOpts().ApproxFunc)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{G,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n // ...\n if (getLangOpts().AllowFPReassoc)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{G,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n // ...\n if (getLangOpts().AllowRecip)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{G,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n if (IsEnabled) {\n // ...\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,764: | Line 3,764: | ||
[h]=p, | [h]=p, | ||
[e]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables.","[CUDA] Do not allow dynamic initialization of global device side variables."}, | [e]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables.","[CUDA] Do not allow dynamic initialization of global device side variables."}, | ||
[k]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n if (IsDeviceOrConstantVar || IsSharedVar) {\n Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}}, | [k]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n // ...\n if (IsDeviceOrConstantVar || IsSharedVar) {\n // ...\n Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCUDA/union-init.cu"]={"clang/test/SemaCUDA/union-init.cu:40:16: error: initialization is not supported for __shared__ variables.","clang/test/SemaCUDA/union-init.cu:42:16: error: initialization is not supported for __shared__ variables."} | ["clang/test/SemaCUDA/union-init.cu"]={"clang/test/SemaCUDA/union-init.cu:40:16: error: initialization is not supported for __shared__ variables.","clang/test/SemaCUDA/union-init.cu:42:16: error: initialization is not supported for __shared__ variables."} | ||
Line 3,794: | Line 3,794: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}}, | [k]={{w,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n // ...\n if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/instantiate-clang.cpp"]={"clang/test/SemaTemplate/instantiate-clang.cpp:34:11: error: index for __builtin_shufflevector must be less than the total number of vector elements","clang/test/SemaTemplate/instantiate-clang.cpp:35:11: error: index for __builtin_shufflevector must be less than the total number of vector elements"} | ["clang/test/SemaTemplate/instantiate-clang.cpp"]={"clang/test/SemaTemplate/instantiate-clang.cpp:34:11: error: index for __builtin_shufflevector must be less than the total number of vector elements","clang/test/SemaTemplate/instantiate-clang.cpp:35:11: error: index for __builtin_shufflevector must be less than the total number of vector elements"} | ||
Line 3,809: | Line 3,809: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->getSourceRange());"}} | [k]={{w,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n // ...\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,821: | Line 3,821: | ||
[h]=v, | [h]=v, | ||
[e]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration","Suggest fix-it \':\' when \'=\' used in for-range-declaration"}, | [e]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration","Suggest fix-it \':\' when \'=\' used in for-range-declaration"}, | ||
[k]={{Y,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n // Parse declarator \'=\' initializer.\n case InitKind::Equal: {\n if (Tok.is(tok::kw_delete)) {\n } else if (Tok.is(tok::kw_default)) {\n } else {\n // If this is the only decl in (possibly) range based for statement,\n // our best guess is that the user meant \':\' instead of \'=\'.\n if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}} | [k]={{Y,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n // ...\n // Parse declarator \'=\' initializer.\n case InitKind::Equal: {\n // ...\n if (Tok.is(tok::kw_delete)) {\n // ...\n } else if (Tok.is(tok::kw_default)) {\n // ...\n } else {\n // ...\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,833: | Line 3,833: | ||
[h]=a, | [h]=a, | ||
[e]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals"}, | [e]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals"}, | ||
[k]={{r,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n if (Literal.GetIntegerValue(ResultVal)) {\n } else {\n // If we still couldn\'t decide a type, we either have \'size_t\' literal\n // that is out of range, or a decimal literal that does not fit in a\n // signed long long and has no U suffix.\n if (Ty.isNull()) {\n if (Literal.isSizeT)\n Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}}, | [k]={{r,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n if (Literal.GetIntegerValue(ResultVal)) {\n // ...\n } else {\n // ...\n // If we still couldn\'t decide a type, we either have \'size_t\' literal\n // that is out of range, or a decimal literal that does not fit in a\n // signed long long and has no U suffix.\n if (Ty.isNull()) {\n if (Literal.isSizeT)\n Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"} | ["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"} | ||
Line 3,848: | Line 3,848: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n // The MSVC compatibility mode doesn\'t extend to sizeless types,\n // so diagnose them separately.\n if (PointeeT->isSizelessType() && Kind != 1) {\n Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}}, | [k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n // ...\n // The MSVC compatibility mode doesn\'t extend to sizeless types,\n // so diagnose them separately.\n if (PointeeT->isSizelessType() && Kind != 1) {\n Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:310:28: error: sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification","clang/test/SemaCXX/sizeless-1.cpp:312:38: error: reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification"} | ["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:310:28: error: sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification","clang/test/SemaCXX/sizeless-1.cpp:312:38: error: reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification"} | ||
Line 3,863: | Line 3,863: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{u,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}}, | [k]={{u,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:8:10: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:9:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:10:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:11:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:57:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"} | ["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:8:10: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:9:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:10:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:11:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:57:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"} | ||
Line 3,878: | Line 3,878: | ||
[h]=p, | [h]=p, | ||
[e]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++.","sizeof(void) etc. should be a hard error in C++."}, | [e]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++.","sizeof(void) etc. should be a hard error in C++."}, | ||
[k]={{r,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n if (ExprTy->isFunctionType()) {\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{r,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n if (ExprType->isFunctionType()) {\n Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}}, | [k]={{r,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (ExprTy->isFunctionType()) {\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{r,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n // ...\n if (ExprType->isFunctionType()) {\n Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"} | ["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"} | ||
Line 3,893: | Line 3,893: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{r,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n } else {\n if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{r,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}}, | [k]={{r,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{r,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\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 // ...\n } else {\n if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{r,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n // ...\n if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"} | ||
Line 3,908: | Line 3,908: | ||
[h]=p, | [h]=p, | ||
[e]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"}, | [e]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"}, | ||
[k]={{r,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n if (E->getObjectKind() == OK_BitField) {\n S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{r,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n if (E->isTypeDependent()) {\n } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n } else if (ExprKind == UETT_VecStep) {\n } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{K,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n if (!getLangOpts().CPlusPlus && E->refersToBitField())\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}}, | [k]={{r,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (E->getObjectKind() == OK_BitField) {\n S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{r,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (E->isTypeDependent()) {\n // ...\n } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n // ...\n } else if (ExprKind == UETT_VecStep) {\n // ...\n } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n // ...\n } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{K,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n // ...\n if (!getLangOpts().CPlusPlus && E->refersToBitField())\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"} | ["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"} | ||
Line 3,938: | Line 3,938: | ||
[h]=p, | [h]=p, | ||
[e]={"820ba7ba43a2",1294162438,Cb,Cb}, | [e]={"820ba7ba43a2",1294162438,Cb,Cb}, | ||
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n/// static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n if (!ParameterPack || !ParameterPack->isParameterPack()) {\n Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}}, | [k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n/// static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n // ...\n if (!ParameterPack || !ParameterPack->isParameterPack()) {\n Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:30:43: error: \'Value\' does not refer to the name of a parameter pack"} | ["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:30:43: error: \'Value\' does not refer to the name of a parameter pack"} | ||
Line 3,953: | Line 3,953: | ||
[h]=p, | [h]=p, | ||
[e]={"820ba7ba43a2",1294162438,Cb,Cb}, | [e]={"820ba7ba43a2",1294162438,Cb,Cb}, | ||
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n/// static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n case LookupResult::NotFoundInCurrentInstantiation: {\n if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}, | [k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n/// static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n // ...\n case LookupResult::NotFound:\n case LookupResult::NotFoundInCurrentInstantiation: {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:43: error: \'Type\' does not refer to the name of a parameter pack; did you mean \'Types\'?"} | ["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:43: error: \'Type\' does not refer to the name of a parameter pack; did you mean \'Types\'?"} | ||
Line 3,968: | Line 3,968: | ||
[h]=v, | [h]=v, | ||
[e]={"820ba7ba43a2",1294162438,Cb,Cb}, | [e]={"820ba7ba43a2",1294162438,Cb,Cb}, | ||
[k]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n/// unary-expression: [C99 6.5.3]\n/// \'sizeof\' unary-expression\n/// \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU] \'__alignof\' unary-expression\n/// [GNU] \'__alignof\' \'(\' type-name \')\'\n/// [C11] \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n if (Tok.is(tok::l_paren)) {\n } else if (Tok.is(tok::identifier)) {\n } else {\n Diag(Tok, diag::err_sizeof_parameter_pack);"}} | [k]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n/// unary-expression: [C99 6.5.3]\n/// \'sizeof\' unary-expression\n/// \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU] \'__alignof\' unary-expression\n/// [GNU] \'__alignof\' \'(\' type-name \')\'\n/// [C11] \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n // ...\n // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n } else if (Tok.is(tok::identifier)) {\n // ...\n } else {\n Diag(Tok, diag::err_sizeof_parameter_pack);"}} | ||
}, | }, | ||
["err_sls_hardening_arm_not_supported"]={ | ["err_sls_hardening_arm_not_supported"]={ | ||
Line 3,980: | Line 3,980: | ||
[h]=a, | [h]=a, | ||
[e]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"}, | [e]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"}, | ||
[k]={{Zb,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // Enable/disable straight line speculation hardening.\n if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n if (EnableRetBr || EnableBlr)\n if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}} | [k]={{Zb,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Enable/disable straight line speculation hardening.\n if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n // ...\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,992: | Line 3,992: | ||
[h]=a, | [h]=a, | ||
[e]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant"}, | [e]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant"}, | ||
[k]={{r,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n case NK_Constant_Narrowing:\n S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{r,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n case NK_Type_Narrowing:\n S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}}, | [k]={{r,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n // ...\n case NK_Constant_Narrowing:\n // ...\n S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{r,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n // ...\n case NK_Type_Narrowing:\n S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"} | ["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"} | ||
Line 4,007: | Line 4,007: | ||
[h]=p, | [h]=p, | ||
[e]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep","For instantiations of static data members of class templates, keep"}, | [e]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep","For instantiations of static data members of class templates, keep"}, | ||
[k]={{s,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization; the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n // Make sure that this is a specialization of a member.\n if (!InstantiatedFrom) {\n Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}}, | [k]={{s,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization; the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n // ...\n // Make sure that this is a specialization of a member.\n if (!InstantiatedFrom) {\n Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"} | ||
Line 4,022: | Line 4,022: | ||
[h]=p, | [h]=p, | ||
[e]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit","Diagnose the declaration of explicit specializations after an implicit"}, | [e]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit","Diagnose the declaration of explicit specializations after an implicit"}, | ||
[k]={{s,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n // C++ [temp.expl.spec]p6:\n // If a template, a member template or the member of a class template is\n // explicitly specialized then that specialization shall be declared\n // before the first use of that specialization that would cause an implicit\n // instantiation to take place, in every translation unit in which such a\n // use occurs; no diagnostic is required.\n if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n if (!Okay) {\n Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{s,8879,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n // C++ [temp.expl.spec]p6:\n // If a template, a member template or the member of a class template is\n // explicitly specialized then that specialization shall be declared\n // before the first use of that specialization that would cause an implicit\n // instantiation to take place, in every translation unit in which such a\n // use occurs; no diagnostic is required.\n if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n if (!Okay) {\n Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{s,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n case TSK_ExplicitSpecialization:\n case TSK_ExplicitInstantiationDefinition:\n Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}}, | [k]={{s,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n // ...\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 // ...\n if (!Okay) {\n // ...\n Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{s,8879,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n // ...\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 // ...\n if (!Okay) {\n // ...\n Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{s,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n // ...\n case TSK_ExplicitSpecialization:\n // ...\n case TSK_ExplicitInstantiationDeclaration:\n case TSK_ExplicitInstantiationDefinition:\n // ...\n Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"} | ||
Line 4,037: | Line 4,037: | ||
[h]=p, | [h]=p, | ||
[e]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple.","Fix a couple of class template argument deduction crashes with libc++\'s tuple."}, | [e]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple.","Fix a couple of class template argument deduction crashes with libc++\'s tuple."}, | ||
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n/// enum Kind {\n/// KnownValue = sizeof(T)\n/// };\n///\n/// bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n while (!DC->isFileContext()) {\n // Move to the outer template scope.\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n if (Guide && Guide->isImplicit()) {\n // Check that this template-id names the primary template and not a\n // partial or explicit specialization. (In the latter cases, it\'s\n // meaningless to attempt to find an instantiation of D within the\n // specialization.)\n // FIXME: The standard doesn\'t say what should happen here.\n if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}} | [k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n/// enum Kind {\n/// KnownValue = sizeof(T)\n/// };\n///\n/// bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n // ...\n if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n while (!DC->isFileContext()) {\n // ...\n // Move to the outer template scope.\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n // ...\n if (Guide && Guide->isImplicit()) {\n // ...\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 4,049: | Line 4,049: | ||
[h]=p, | [h]=p, | ||
[e]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits","Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"}, | [e]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits","Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"}, | ||
[k]={{s,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n if (SawNonEmptyTemplateParameterList) {\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}}, | [k]={{s,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n if (SawNonEmptyTemplateParameterList) {\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"} | ["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"} | ||
Line 4,064: | Line 4,064: | ||
[h]=a, | [h]=a, | ||
[e]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs"}, | [e]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs"}, | ||
[k]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}} | [k]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n // ...\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 4,076: | Line 4,076: | ||
[h]=p, | [h]=p, | ||
[e]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations."}, | [e]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations."}, | ||
[k]={{u,5157,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n if (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}}, | [k]={{u,5157,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n // ...\n if (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n // ...\n Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:11:8: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:13:29: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:23:29: error: forward declaration of struct cannot have a nested name specifier"} | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:11:8: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:13:29: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:23:29: error: forward declaration of struct cannot have a nested name specifier"} | ||
Line 4,091: | Line 4,091: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{A,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}}, | [k]={{A,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"} | ["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"} | ||
Line 4,106: | Line 4,106: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{A,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n if (!Failed && !Cond && !InTemplateDefinition) {\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{A,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n if (!Failed && !Cond && !InTemplateDefinition) {\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n } else {\n Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}}, | [k]={{A,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && !Cond && !InTemplateDefinition) {\n // ...\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n // ...\n Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{A,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && !Cond && !InTemplateDefinition) {\n // ...\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n // ...\n } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n // ...\n } else {\n Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "} | ["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "} | ||
Line 4,121: | Line 4,121: | ||
[h]=p, | [h]=p, | ||
[e]={"47ccfd7a89e2",1667306232,sb,sb}, | [e]={"47ccfd7a89e2",1667306232,sb,sb}, | ||
[k]={{A,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n default:\n if (Diag)\n Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{A,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (EvaluatedSize.isInvalid()) {\n Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{A,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (EvaluatedData.isInvalid()) {\n Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}}, | [k]={{A,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n // ...\n default:\n if (Diag)\n Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{A,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (EvaluatedSize.isInvalid()) {\n Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{A,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (EvaluatedData.isInvalid()) {\n Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"} | ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"} | ||
Line 4,136: | Line 4,136: | ||
[h]=p, | [h]=p, | ||
[e]={"47ccfd7a89e2",1667306232,sb,sb}, | [e]={"47ccfd7a89e2",1667306232,sb,sb}, | ||
[k]={{A,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (!RD) {\n Diag(Loc, diag::err_static_assert_invalid_message);"}}, | [k]={{A,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (!RD) {\n Diag(Loc, diag::err_static_assert_invalid_message);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"} | ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"} | ||
Line 4,151: | Line 4,151: | ||
[h]=p, | [h]=p, | ||
[e]={"47ccfd7a89e2",1667306232,sb,sb}, | [e]={"47ccfd7a89e2",1667306232,sb,sb}, | ||
[k]={{A,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}}, | [k]={{A,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"} | ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"} | ||
Line 4,166: | Line 4,166: | ||
[h]=p, | [h]=p, | ||
[e]={"47ccfd7a89e2",1667306232,sb,sb}, | [e]={"47ccfd7a89e2",1667306232,sb,sb}, | ||
[k]={{A,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (SizeNotFound || DataNotFound) {\n Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}}, | [k]={{A,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (SizeNotFound || DataNotFound) {\n Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"} | ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"} | ||
Line 4,181: | Line 4,181: | ||
[h]=p, | [h]=p, | ||
[e]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert.","Diagnostic specific failed condition in a static_assert."}, | [e]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert.","Diagnostic specific failed condition in a static_assert."}, | ||
[k]={{A,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n if (!Failed && !Cond && !InTemplateDefinition) {\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}}, | [k]={{A,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && !Cond && !InTemplateDefinition) {\n // ...\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n // ...\n } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "} | ||
Line 4,196: | Line 4,196: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n case DeclSpec::SCS_static: {\n if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}}, | [k]={{u,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n // ...\n case DeclSpec::SCS_static: {\n if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n // ...\n SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:58:3: error: function declared in block scope cannot have \'static\' storage class"} | ["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:58:3: error: function declared in block scope cannot have \'static\' storage class"} | ||
Line 4,211: | Line 4,211: | ||
[h]=p, | [h]=p, | ||
[e]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding"}, | [e]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding"}, | ||
[k]={{u,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n if (FunctionOrMethod) {\n } else if (AnonStruct) {\n Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}}, | [k]={{u,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n // ...\n if (FunctionOrMethod) {\n // ...\n } else if (AnonStruct) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class/class.union/p2-0x.cpp"]={"clang/test/CXX/class/class.union/p2-0x.cpp:40:22: error: static data member \'n\' not allowed in anonymous union","clang/test/CXX/class/class.union/p2-0x.cpp:46:20: error: static data member \'k\' not allowed in anonymous union"} | ["clang/test/CXX/class/class.union/p2-0x.cpp"]={"clang/test/CXX/class/class.union/p2-0x.cpp:40:22: error: static data member \'n\' not allowed in anonymous union","clang/test/CXX/class/class.union/p2-0x.cpp:46:20: error: static data member \'k\' not allowed in anonymous union"} | ||
Line 4,226: | Line 4,226: | ||
[h]=p, | [h]=p, | ||
[e]={"d2e8adfc7599",1245803333,"Support for [class.local]p4.","Support for [class.local]p4."}, | [e]={"d2e8adfc7599",1245803333,"Support for [class.local]p4.","Support for [class.local]p4."}, | ||
[k]={{u,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n if (FunctionOrMethod) {\n Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}}, | [k]={{u,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n // ...\n if (FunctionOrMethod) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/blocks.cpp"]={"clang/test/SemaCXX/blocks.cpp:160:18: error: static data member \'x\' not allowed in local class \'X\'","clang/test/SemaCXX/blocks.cpp:164:20: error: static data member \'z\' not allowed in local struct \'Z\'"} | ["clang/test/SemaCXX/blocks.cpp"]={"clang/test/SemaCXX/blocks.cpp:160:18: error: static data member \'x\' not allowed in local class \'X\'","clang/test/SemaCXX/blocks.cpp:164:20: error: static data member \'z\' not allowed in local struct \'Z\'"} | ||
Line 4,241: | Line 4,241: | ||
[h]=p, | [h]=p, | ||
[e]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static","Provide better diagnostic wording for initializers on static"}, | [e]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static","Provide better diagnostic wording for initializers on static"}, | ||
[k]={{u,13249,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n if (getLangOpts().CPlusPlus) {\n // C++ [class.static.data]p4\n // If a static data member is of const integral or const\n // enumeration type, its declaration in the class definition can\n // specify a constant-initializer which shall be an integral\n // constant expression (5.19). In that case, the member can appear\n // in integral constant expressions. The member shall still be\n // defined in a namespace scope if it is used in the program and the\n // namespace scope definition shall not contain an initializer.\n //\n // We already performed a redefinition check above, but for static\n // data members we also need to check whether there was an in-class\n // declaration with an initializer.\n if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}}, | [k]={{u,13249,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // C++ [class.static.data]p4\n // If a static data member is of const integral or const\n // enumeration type, its declaration in the class definition can\n // specify a constant-initializer which shall be an integral\n // constant expression (5.19). In that case, the member can appear\n // in integral constant expressions. The member shall still be\n // defined in a namespace scope if it is used in the program and the\n // namespace scope definition shall not contain an initializer.\n //\n // We already performed a redefinition check above, but for static\n // data members we also need to check whether there was an in-class\n // declaration with an initializer.\n if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class/class.static/class.static.data/p4.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p4.cpp:15:63: error: static data member \'i\' already has an initializer","clang/test/CXX/class/class.static/class.static.data/p4.cpp:20:62: error: static data member \'i\' already has an initializer"} | ["clang/test/CXX/class/class.static/class.static.data/p4.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p4.cpp:15:63: error: static data member \'i\' already has an initializer","clang/test/CXX/class/class.static/class.static.data/p4.cpp:20:62: error: static data member \'i\' already has an initializer"} | ||
Line 4,256: | Line 4,256: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{rb,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n if (Paths.getDetectedVirtual() != nullptr) {\n Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}}, | [k]={{rb,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n // ...\n if (Paths.getDetectedVirtual() != nullptr) {\n // ...\n Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"} | ["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"} | ||
Line 4,271: | Line 4,271: | ||
[h]=p, | [h]=p, | ||
[e]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2."}, | [e]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2."}, | ||
[k]={{u,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n // scope.\n if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n Diag(NewVD->getLocation(), diag::err_static_function_scope);"}}, | [k]={{u,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n // scope.\n if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n Diag(NewVD->getLocation(), diag::err_static_function_scope);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:117:14: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:124:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:170:16: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:177:25: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:182:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:189:22: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:198:24: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:207:24: error: variables in function scope cannot be declared static"} | ["clang/test/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:117:14: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:124:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:170:16: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:177:25: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:182:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:189:22: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:198:24: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:207:24: error: variables in function scope cannot be declared static"} | ||
Line 4,286: | Line 4,286: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{J,1866,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n/// if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n // If the specified type is an array, unwrap it and save the expression.\n if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n if (Chunk.Arr.hasStatic)\n return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}} | [k]={{J,1866,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n/// if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n // ...\n // If the specified type is an array, unwrap it and save the expression.\n if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n // ...\n if (Chunk.Arr.hasStatic)\n return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}} | ||
}, | }, | ||
["err_static_kernel"]={ | ["err_static_kernel"]={ | ||
Line 4,298: | Line 4,298: | ||
[h]=p, | [h]=p, | ||
[e]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2."}, | [e]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2."}, | ||
[k]={{u,10691,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n if (SC == SC_Static) {\n Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}}, | [k]={{u,10691,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n if (SC == SC_Static) {\n Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/storageclass-cl20.cl"]={"clang/test/SemaOpenCL/storageclass-cl20.cl:22:20: error: kernel functions cannot be declared static"} | ["clang/test/SemaOpenCL/storageclass-cl20.cl"]={"clang/test/SemaOpenCL/storageclass-cl20.cl:22:20: error: kernel functions cannot be declared static"} | ||
Line 4,330: | Line 4,330: | ||
[h]=v, | [h]=v, | ||
[e]={"6523814c4e38",1664466303,Gb,Gb}, | [e]={"6523814c4e38",1664466303,Gb,Gb}, | ||
[k]={{nb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n if (Intro.hasLambdaCapture()) {\n P.Diag(StaticLoc, diag::err_static_lambda_captures);"}}, | [k]={{nb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n // ...\n if (Intro.hasLambdaCapture()) {\n P.Diag(StaticLoc, diag::err_static_lambda_captures);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"} | ["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"} | ||
Line 4,360: | Line 4,360: | ||
[h]=v, | [h]=v, | ||
[e]={"6523814c4e38",1664466303,Gb,Gb}, | [e]={"6523814c4e38",1664466303,Gb,Gb}, | ||
[k]={{nb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n // [expr.prim.lambda.general] p4\n // The lambda-specifier-seq shall not contain both mutable and static.\n // If the lambda-specifier-seq contains static, there shall be no\n // lambda-capture.\n if (MutableLoc.isValid())\n P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}}, | [k]={{nb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n // ...\n // [expr.prim.lambda.general] p4\n // The lambda-specifier-seq shall not contain both mutable and static.\n // If the lambda-specifier-seq contains static, there shall be no\n // lambda-capture.\n if (MutableLoc.isValid())\n P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"} | ["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"} | ||
Line 4,375: | Line 4,375: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,3702,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // Don\'t complain about this if we\'re in GNU89 mode and the old function\n // is an extern inline function.\n // Don\'t complain about specializations. They are not supposed to have\n // storage classes.\n if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n if (getLangOpts().MicrosoftExt) {\n } else {\n Diag(New->getLocation(), diag::err_static_non_static) << New;"},{u,4633,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n if (getLangOpts().MicrosoftExt) {\n } else {\n Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}}, | [k]={{u,3702,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // ...\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 // ...\n } else {\n Diag(New->getLocation(), diag::err_static_non_static) << New;"},{u,4633,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n // ...\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 // ...\n } else {\n Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: error: static declaration of \'operator delete\' follows non-static declaration"} | ["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: error: static declaration of \'operator delete\' follows non-static declaration"} | ||
Line 4,390: | Line 4,390: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{A,3626,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n if (isInstField) {\n } else {\n // Non-instance-fields can\'t have a bitfield.\n if (BitWidth) {\n if (Member->isInvalidDecl()) {\n } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}}, | [k]={{A,3626,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n // ...\n if (isInstField) {\n // ...\n } else {\n // ...\n // Non-instance-fields can\'t have a bitfield.\n if (BitWidth) {\n if (Member->isInvalidDecl()) {\n // ...\n } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n // ...\n Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"} | ["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"} | ||
Line 4,405: | Line 4,405: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (DC->isRecord() && !CurContext->isRecord()) {\n case SC_Static:\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{u,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | [k]={{u,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (DC->isRecord() && !CurContext->isRecord()) {\n // ...\n case SC_Static:\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{u,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n // ...\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:32:12: error: \'static\' can only be specified inside the class definition"} | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:32:12: error: \'static\' can only be specified inside the class definition"} | ||
Line 4,420: | Line 4,420: | ||
[h]=p, | [h]=p, | ||
[e]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function","Diagnose when a \'static\' member function overrides a virtual function"}, | [e]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function","Diagnose when a \'static\' member function overrides a virtual function"}, | ||
[k]={{A,7018,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n/// parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n // Perform checks that can\'t be done until we know all the properties of a\n // member function (whether it\'s defaulted, deleted, virtual, overriding,\n // ...).\n auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n // A static function cannot override anything.\n if (MD->getStorageClass() == SC_Static) {\n if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}}, | [k]={{A,7018,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n/// parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n // ...\n // Perform checks that can\'t be done until we know all the properties of a\n // member function (whether it\'s defaulted, deleted, virtual, overriding,\n // ...).\n auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n // A static function cannot override anything.\n if (MD->getStorageClass() == SC_Static) {\n if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"} | ["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"} | ||
Line 4,435: | Line 4,435: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{u,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if (T->isObjCObjectType()) {\n Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{u,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n } else if (FDTy->isObjCObjectType()) {\n Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{W,608,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n if (T->isObjCObjectType()) {\n Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}}, | [k]={{u,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (T->isObjCObjectType()) {\n Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{u,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n // ...\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n // ...\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n // ...\n } else if (FDTy->isObjCObjectType()) {\n // ...\n Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{W,608,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n // ...\n if (T->isObjCObjectType()) {\n // ...\n Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"} | ["clang/test/SemaObjC/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"} | ||
Line 4,450: | Line 4,450: | ||
[h]=a, | [h]=a, | ||
[e]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant"}, | [e]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant"}, | ||
[k]={{A,11591,"struct InvalidSTLDiagnoser {\n QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n {\n auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}}, | [k]={{A,11591,"struct InvalidSTLDiagnoser {\n // ...\n QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n {\n auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"} | ["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"} | ||
Line 4,465: | Line 4,465: | ||
[h]=a, | [h]=a, | ||
[e]={Vb,1620118562,fb,fb}, | [e]={Vb,1620118562,fb,fb}, | ||
[k]={{r,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // Verify that __impl is a trivial struct type, with no base classes, and with\n // only the four expected fields.\n if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{r,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n if (Count != 4) {\n S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}}, | [k]={{r,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n // Verify that __impl is a trivial struct type, with no base classes, and with\n // only the four expected fields.\n if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{r,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n if (Count != 4) {\n S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"} | ["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"} | ||
Line 4,480: | Line 4,480: | ||
[h]=a, | [h]=a, | ||
[e]={Vb,1620118562,fb,fb}, | [e]={Vb,1620118562,fb,fb}, | ||
[k]={{r,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}}, | [k]={{r,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"} | ["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"} | ||
Line 4,495: | Line 4,495: | ||
[h]=p, | [h]=p, | ||
[e]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a","P0217R3: Perform semantic checks and initialization for the bindings in a"}, | [e]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a","P0217R3: Perform semantic checks and initialization for the bindings in a"}, | ||
[k]={{A,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n if (!TraitTD) {\n S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}} | [k]={{A,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n // ...\n if (!TraitTD) {\n // ...\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 4,507: | Line 4,507: | ||
[h]=p, | [h]=p, | ||
[e]={Vb,1620118562,fb,fb}, | [e]={Vb,1620118562,fb,fb}, | ||
[k]={{Y,7470,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed. If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n/// parameter-type-list: [C99 6.7.5]\n/// parameter-list\n/// parameter-list \',\' \'...\'\n/// [C++] parameter-list \'...\'\n///\n/// parameter-list: [C99 6.7.5]\n/// parameter-declaration\n/// parameter-list \',\' parameter-declaration\n///\n/// parameter-declaration: [C99 6.7.5]\n/// declaration-specifiers declarator\n/// [C++] declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11] initializer-clause\n/// [GNU] declaration-specifiers declarator attributes\n/// declaration-specifiers abstract-declarator[opt]\n/// [C++] declaration-specifiers abstract-declarator[opt]\n/// \'=\' assignment-expression\n/// [GNU] declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n do {\n // If no parameter was specified, verify that *something* was specified,\n // otherwise we have a missing type and identifier.\n if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n } else {\n // Parse the default argument, if any. We parse the default\n // arguments in all dialects; the semantic analysis in\n // ActOnParamDefaultArgument will reject the default argument in\n // C.\n if (Tok.is(tok::equal)) {\n // Parse the default argument\n if (DeclaratorCtx == DeclaratorContext::Member) {\n } else {\n if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n } else {\n if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{bc,1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n/// template-parameter:\n/// ...\n/// parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n if (TryConsumeToken(tok::equal, EqualLoc)) {\n if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}}, | [k]={{Y,7470,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed. If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n/// parameter-type-list: [C99 6.7.5]\n/// parameter-list\n/// parameter-list \',\' \'...\'\n/// [C++] parameter-list \'...\'\n///\n/// parameter-list: [C99 6.7.5]\n/// parameter-declaration\n/// parameter-list \',\' parameter-declaration\n///\n/// parameter-declaration: [C99 6.7.5]\n/// declaration-specifiers declarator\n/// [C++] declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11] initializer-clause\n/// [GNU] declaration-specifiers declarator attributes\n/// declaration-specifiers abstract-declarator[opt]\n/// [C++] declaration-specifiers abstract-declarator[opt]\n/// \'=\' assignment-expression\n/// [GNU] declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n // ...\n do {\n // ...\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 // ...\n } else {\n // ...\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 // ...\n // Parse the default argument\n if (DeclaratorCtx == DeclaratorContext::Member) {\n // ...\n } else {\n // ...\n if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n // ...\n } else {\n if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{bc,1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n/// template-parameter:\n/// ...\n/// parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n // ...\n if (TryConsumeToken(tok::equal, EqualLoc)) {\n if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"} | ["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"} | ||
Line 4,522: | Line 4,522: | ||
[h]=v, | [h]=v, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}}, | [k]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // ...\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n // ...\n if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:24:11: error: statement expression not allowed at file scope"} | ["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:24:11: error: statement expression not allowed at file scope"} | ||
Line 4,537: | Line 4,537: | ||
[h]=p, | [h]=p, | ||
[e]={"45f96f87c3cf",1371649314,"Fix pr16354.","Fix pr16354."}, | [e]={"45f96f87c3cf",1371649314,"Fix pr16354.","Fix pr16354."}, | ||
[k]={{u,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (DC->isRecord() && !CurContext->isRecord()) {\n case SC_Extern:\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | [k]={{u,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (DC->isRecord() && !CurContext->isRecord()) {\n // ...\n case SC_Auto:\n case SC_Register:\n case SC_Extern:\n // ...\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/static-data-member.cpp"]={"clang/test/SemaCXX/static-data-member.cpp:13:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:15:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:16:1: error: static data member definition cannot specify a storage class"} | ["clang/test/SemaCXX/static-data-member.cpp"]={"clang/test/SemaCXX/static-data-member.cpp:13:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:15:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:16:1: error: static data member definition cannot specify a storage class"} | ||
Line 4,552: | Line 4,552: | ||
[h]=p, | [h]=p, | ||
[e]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from"}, | [e]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from"}, | ||
[k]={{eb,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // We allow the \"register\" storage class on exception variables because\n // GCC did, but we drop it completely. Any other storage class is an error.\n if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}}, | [k]={{eb,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // ...\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 // ...\n } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"} | ["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"} | ||
Line 4,567: | Line 4,567: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{A,3495,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n default:\n Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}}, | [k]={{A,3495,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n // ...\n default:\n Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"} | ["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"} | ||
Line 4,582: | Line 4,582: | ||
[h]="Inline Assembly Issue", | [h]="Inline Assembly Issue", | ||
[e]={Vb,1620118562,fb,fb}, | [e]={Vb,1620118562,fb,fb}, | ||
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n // ResultTypeRequiresCast elements correspond to the first\n // ResultTypeRequiresCast.size() elements of RegResults.\n if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n if (Ty.isNull()) {\n CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n // If the smaller value wasn\'t mentioned in the asm string, and if the\n // output was a register, just extend the shorter one to the size of the\n // larger one.\n if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n // crash when the size larger than the register size. So we limit it here.\n if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}}, | [k]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n // ...\n for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n // ...\n // ResultTypeRequiresCast elements correspond to the first\n // ResultTypeRequiresCast.size() elements of RegResults.\n if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n // ...\n if (Ty.isNull()) {\n // ...\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 // ...\n for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n // ...\n // If the smaller value wasn\'t mentioned in the asm string, and if the\n // output was a register, just extend the shorter one to the size of the\n // larger one.\n if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n // crash when the size larger than the register size. So we limit it here.\n if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:362:20: error: impossible constraint in asm: can\'t store value into a register"} | ["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:362:20: error: impossible constraint in asm: can\'t store value into a register"} | ||
Line 4,597: | Line 4,597: | ||
[h]=z, | [h]=z, | ||
[e]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token","Lexing support for user-defined literals. Currently these lex as the same token"}, | [e]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token","Lexing support for user-defined literals. Currently these lex as the same token"}, | ||
[k]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n // Remove an optional ud-suffix.\n if (ThisTokEnd[-1] != \'\"\') {\n if (UDSuffixBuf.empty()) {\n } else {\n if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n if (Diags) {\n if (UnevaluatedStringHasUDL) {\n } else {\n Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}}, | [k]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n // ...\n for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n // ...\n // Remove an optional ud-suffix.\n if (ThisTokEnd[-1] != \'\"\') {\n // ...\n if (UDSuffixBuf.empty()) {\n // ...\n } else {\n // ...\n if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n if (Diags) {\n // ...\n if (UnevaluatedStringHasUDL) {\n // ...\n } else {\n Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp:10:13: error: differing user-defined suffixes (\'_x\' and \'_y\') in string literal concatenation"} | ["clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp:10:13: error: differing user-defined suffixes (\'_x\' and \'_y\') in string literal concatenation"} | ||
Line 4,612: | Line 4,612: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{W,1410,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // Fall thru - see previous comment\n if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}}, | [k]={{W,1410,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\n // Fall thru - see previous comment\n if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"} | ["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"} | ||
Line 4,627: | Line 4,627: | ||
[h]=p, | [h]=p, | ||
[e]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for","Make sure to use RequireCompleteType rather than testing for"}, | [e]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for","Make sure to use RequireCompleteType rather than testing for"}, | ||
[k]={{r,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n // type. Note that Functions are not objects, and that (in C99 parlance)\n // incomplete types are not object types.\n if (ResultType->isFunctionType()) {\n Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}} | [k]={{r,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\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 4,639: | Line 4,639: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}}, | [k]={{r,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"} | ["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"} | ||
Line 4,654: | Line 4,654: | ||
[h]=p, | [h]=p, | ||
[e]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode","Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"}, | [e]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode","Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"}, | ||
[k]={{r,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n if (!LangOpts.isSubscriptPointerArithmetic()) {\n Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}} | [k]={{r,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n if (!LangOpts.isSubscriptPointerArithmetic()) {\n Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}} | ||
}, | }, | ||
["err_subscript_svbool_t"]={ | ["err_subscript_svbool_t"]={ | ||
Line 4,666: | Line 4,666: | ||
[h]=p, | [h]=p, | ||
[e]={"cb08f4aa4467",1620530452,Ab,Ab}, | [e]={"cb08f4aa4467",1620530452,Ab,Ab}, | ||
[k]={{r,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n if (BTy->isSVEBool())\n return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}, | [k]={{r,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n // ...\n if (BTy->isSVEBool())\n return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/aarch64-sve-vector-subscript-ops.c"]={"clang/test/Sema/aarch64-sve-vector-subscript-ops.c:11:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:12:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:13:10: error: subscript of svbool_t is not allowed"} | ["clang/test/Sema/aarch64-sve-vector-subscript-ops.c"]={"clang/test/Sema/aarch64-sve-vector-subscript-ops.c:11:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:12:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:13:10: error: subscript of svbool_t is not allowed"} | ||
Line 4,696: | Line 4,696: | ||
[h]=v, | [h]=v, | ||
[e]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236)."}, | [e]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236)."}, | ||
[k]={{jb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n/// using-declarator:\n/// \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n if (Tok.is(tok::kw___super)) {\n Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}}, | [k]={{jb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n/// using-declarator:\n/// \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n // ...\n if (Tok.is(tok::kw___super)) {\n Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"} | ["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"} | ||
Line 4,711: | Line 4,711: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{yb,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // Don\'t allow SVE types in functions without a SVE target.\n if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{u,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // Check that SVE types are only used in functions with SVE available.\n if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}}, | [k]={{yb,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // ...\n // Don\'t allow SVE types in functions without a SVE target.\n if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n // ...\n if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{u,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // Check that SVE types are only used in functions with SVE available.\n if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n // ...\n if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/arm-sve-target.cpp"]={"clang/test/Sema/arm-sve-target.cpp:6:17: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:25:15: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:34:6: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:42:23: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:41:21: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve"} | ["clang/test/Sema/arm-sve-target.cpp"]={"clang/test/Sema/arm-sve-target.cpp:6:17: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:25:15: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:34:6: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:42:23: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:41:21: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve"} | ||
Line 4,726: | Line 4,726: | ||
[h]=p, | [h]=p, | ||
[e]={"477f2bb0d53c",1456987172,tb,tb}, | [e]={"477f2bb0d53c",1456987172,tb,tb}, | ||
[k]={{V,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n case ParameterABI::SwiftContext:\n if (!isValidSwiftContextType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{V,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n case ParameterABI::SwiftAsyncContext:\n if (!isValidSwiftContextType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{V,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n case ParameterABI::SwiftErrorResult:\n if (!isValidSwiftErrorResultType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{V,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n case ParameterABI::SwiftIndirectResult:\n if (!isValidSwiftIndirectResultType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}}, | [k]={{V,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftContext:\n if (!isValidSwiftContextType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{V,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftAsyncContext:\n if (!isValidSwiftContextType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{V,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftErrorResult:\n if (!isValidSwiftErrorResultType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{V,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftIndirectResult:\n if (!isValidSwiftIndirectResultType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:21:31: error: \'swift_indirect_result\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:29:51: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:30:52: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int *\'","clang/test/SemaCXX/attr-swiftcall.cpp:35:23: error: \'swift_context\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:42:29: error: \'swift_async_context\' parameter must have pointer type; type here is \'int\'"} | ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:21:31: error: \'swift_indirect_result\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:29:51: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:30:52: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int *\'","clang/test/SemaCXX/attr-swiftcall.cpp:35:23: error: \'swift_context\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:42:29: error: \'swift_async_context\' parameter must have pointer type; type here is \'int\'"} | ||
Line 4,741: | Line 4,741: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{V,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (Kind == SwiftAsyncAttr::None) {\n } else {\n if (!CompletionBlockType->isBlockPointerType()) {\n S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{V,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (Kind == SwiftAsyncAttr::None) {\n } else {\n if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}}, | [k]={{V,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Kind == SwiftAsyncAttr::None) {\n // ...\n } else {\n // ...\n if (!CompletionBlockType->isBlockPointerType()) {\n S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{V,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Kind == SwiftAsyncAttr::None) {\n // ...\n } else {\n // ...\n if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:12:32: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int\'","clang/test/SemaObjC/attr-swift-async.m:13:39: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:23:26: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:36:43: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'"} | ["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:12:32: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int\'","clang/test/SemaObjC/attr-swift-async.m:13:39: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:23:26: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:36:43: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'"} | ||
Line 4,756: | Line 4,756: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{V,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n case SwiftAsyncErrorAttr::NonNullError: {\n if (!AnyErrorParams) {\n S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}}, | [k]={{V,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n // ...\n case SwiftAsyncErrorAttr::NonNullError: {\n // ...\n if (!AnyErrorParams) {\n S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:37:1: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a function with a completion handler with an error parameter","clang/test/SemaObjC/attr-swift-async-error.m:89:3: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a method with a completion handler with an error parameter"} | ["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:37:1: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a function with a completion handler with an error parameter","clang/test/SemaObjC/attr-swift-async-error.m:89:3: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a method with a completion handler with an error parameter"} | ||
Line 4,771: | Line 4,771: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{V,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n case SwiftAsyncErrorAttr::NonZeroArgument: {\n if (!ErrorParam->isIntegralType(S.Context)) {\n S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}}, | [k]={{V,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n // ...\n case SwiftAsyncErrorAttr::ZeroArgument:\n case SwiftAsyncErrorAttr::NonZeroArgument: {\n // ...\n if (!ErrorParam->isIntegralType(S.Context)) {\n // ...\n S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:41:1: error: \'swift_async_error\' attribute with \'zero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'","clang/test/SemaObjC/attr-swift-async-error.m:81:3: error: \'swift_async_error\' attribute with \'nonzero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'"} | ["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:41:1: error: \'swift_async_error\' attribute with \'zero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'","clang/test/SemaObjC/attr-swift-async-error.m:81:3: error: \'swift_async_error\' attribute with \'nonzero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'"} | ||
Line 4,798: | Line 4,798: | ||
[h]=p, | [h]=p, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{V,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}}, | [k]={{V,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:20:1: error: first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"} | ["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:20:1: error: first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"} | ||
Line 4,813: | Line 4,813: | ||
[h]=p, | [h]=p, | ||
[e]={"477f2bb0d53c",1456987172,tb,tb}, | [e]={"477f2bb0d53c",1456987172,tb,tb}, | ||
[k]={{K,3005,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n // swift_error parameters must be preceded by a swift_context parameter.\n case ParameterABI::SwiftErrorResult:\n if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}}, | [k]={{K,3005,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n // ...\n for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n // ...\n // swift_error parameters must be preceded by a swift_context parameter.\n case ParameterABI::SwiftErrorResult:\n // ...\n if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter","clang/test/SemaCXX/attr-swiftcall.cpp:28:64: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter"} | ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter","clang/test/SemaCXX/attr-swiftcall.cpp:28:64: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter"} | ||
Line 4,828: | Line 4,828: | ||
[h]=p, | [h]=p, | ||
[e]={"477f2bb0d53c",1456987172,tb,tb}, | [e]={"477f2bb0d53c",1456987172,tb,tb}, | ||
[k]={{K,2986,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n // swift_indirect_result parameters must be a prefix of the function\n // arguments.\n case ParameterABI::SwiftIndirectResult:\n if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}}, | [k]={{K,2986,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n // ...\n for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n // ...\n // swift_indirect_result parameters must be a prefix of the function\n // arguments.\n case ParameterABI::SwiftIndirectResult:\n // ...\n if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:20:68: error: \'swift_indirect_result\' parameters must be first parameters of function"} | ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:20:68: error: \'swift_indirect_result\' parameters must be first parameters of function"} | ||
Line 4,843: | Line 4,843: | ||
[h]=p, | [h]=p, | ||
[e]={"477f2bb0d53c",1456987172,tb,tb}, | [e]={"477f2bb0d53c",1456987172,tb,tb}, | ||
[k]={{K,2966,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}}, | [k]={{K,2966,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n // ...\n auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n // ...\n S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:19:53: error: \'swift_indirect_result\' parameter can only be used with swiftcall or swiftasynccall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter can only be used with swiftcall calling conventions","clang/test/SemaCXX/attr-swiftcall.cpp:34:37: error: \'swift_context\' parameter can only be used with swiftcall or swiftasynccall calling convention"} | ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:19:53: error: \'swift_indirect_result\' parameter can only be used with swiftcall or swiftasynccall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter can only be used with swiftcall calling conventions","clang/test/SemaCXX/attr-swiftcall.cpp:34:37: error: \'swift_context\' parameter can only be used with swiftcall or swiftasynccall calling convention"} | ||
Line 4,858: | Line 4,858: | ||
[h]=p, | [h]=p, | ||
[e]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an"}, | [e]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an"}, | ||
[k]={{T,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}}, | [k]={{T,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:9:3: error: switch condition type \'A\' requires explicit conversion to \'int\'"} | ["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:9:3: error: switch condition type \'A\' requires explicit conversion to \'int\'"} | ||
Line 4,873: | Line 4,873: | ||
[h]=p, | [h]=p, | ||
[e]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion","Require a class type to be complete before probing its conversion"}, | [e]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion","Require a class type to be complete before probing its conversion"}, | ||
[k]={{T,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}}, | [k]={{T,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"} | ["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"} | ||
Line 4,888: | Line 4,888: | ||
[h]=p, | [h]=p, | ||
[e]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors.","first step to getting switches giving \"jump into vla scope\" errors."}, | [e]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors.","first step to getting switches giving \"jump into vla scope\" errors."}, | ||
[k]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n while (I != E) {\n if (I->getID() == diag::err_switch_into_protected_scope && isInRange(I->getLocation(), BodyRange)) {"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",134,"class ProtectedScopeFixer {\n void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n if (handledAllNotes)\n Pass.TA.clearDiagnostic(diag::err_switch_into_protected_scope, ErrLoc);"},{"clang/lib/Sema/JumpDiagnostics.cpp",712,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n while (!Jumps.empty()) {\n for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}, | [k]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n // ...\n ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n // ...\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 // ...\n void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n // ...\n assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n // ...\n void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n // ...\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 // ...\n for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n // ...\n CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:20:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:44:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:63:3: error: cannot jump from switch statement to this case label"} | ["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:20:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:44:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:63:3: error: cannot jump from switch statement to this case label"} | ||
Line 4,903: | Line 4,903: | ||
[h]=p, | [h]=p, | ||
[e]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an"}, | [e]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an"}, | ||
[k]={{T,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}}, | [k]={{T,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:33:3: error: multiple conversions from switch condition type \'B\' to an integral or enumeration type"} | ["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:33:3: error: multiple conversions from switch condition type \'B\' to an integral or enumeration type"} | ||
Line 4,918: | Line 4,918: | ||
[h]=a, | [h]=a, | ||
[e]={Yb,1616787805,mb,mb}, | [e]={Yb,1616787805,mb,mb}, | ||
[k]={{u,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n if (NumInitMethods > 1 || !Def->hasInitMethod())\n Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}}, | [k]={{u,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n // ...\n if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n // ...\n if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n // ...\n if (NumInitMethods > 1 || !Def->hasInitMethod())\n Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaSYCL/special-class-attribute.cpp"]={"clang/test/SemaSYCL/special-class-attribute.cpp:42:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:45:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:49:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:56:8: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:59:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:78:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:83:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:88:38: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:93:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"} | ["clang/test/SemaSYCL/special-class-attribute.cpp"]={"clang/test/SemaSYCL/special-class-attribute.cpp:42:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:45:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:49:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:56:8: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:59:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:78:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:83:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:88:38: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:93:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"} | ||
Line 4,933: | Line 4,933: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{W,1176,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n if (Synthesize) {\n Diag(AtLoc, diag::err_synthesize_category_decl);"}}, | [k]={{W,1176,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n // ...\n } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n if (Synthesize) {\n Diag(AtLoc, diag::err_synthesize_category_decl);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"} | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"} | ||
Line 4,948: | Line 4,948: | ||
[h]=p, | [h]=p, | ||
[e]={bb,1480718311,L,L}, | [e]={bb,1480718311,L,L}, | ||
[k]={{W,1118,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n if (property->isClassProperty() && Synthesize) {\n Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}}, | [k]={{W,1118,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n // ...\n if (property->isClassProperty() && Synthesize) {\n Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:32:16: error: @synthesize not allowed on a class property \'c2\'"} | ["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:32:16: error: @synthesize not allowed on a class property \'c2\'"} | ||
Line 4,963: | Line 4,963: | ||
[h]=p, | [h]=p, | ||
[e]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C."}, | [e]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C."}, | ||
[k]={{W,1335,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n if (!Ivar) {\n if (!CompleteTypeErr) {\n if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}}, | [k]={{W,1335,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (!Ivar) {\n // ...\n if (!CompleteTypeErr) {\n // ...\n if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:214:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable","clang/test/SemaObjC/flexible-array.m:220:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable"} | ["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:214:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable","clang/test/SemaObjC/flexible-array.m:220:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable"} | ||
Line 4,978: | Line 4,978: | ||
[h]=v, | [h]=v, | ||
[e]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions","Improve diagnostics and recovery when parsing @synthesized definitions"}, | [e]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions","Improve diagnostics and recovery when parsing @synthesized definitions"}, | ||
[k]={{"clang/lib/Parse/ParseObjc.cpp",2385,"/// property-synthesis:\n/// @synthesize property-ivar-list \';\'\n///\n/// property-ivar-list:\n/// property-ivar\n/// property-ivar-list \',\' property-ivar\n///\n/// property-ivar:\n/// identifier\n/// identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n while (true) {\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::err_synthesized_property_name);"}}, | [k]={{"clang/lib/Parse/ParseObjc.cpp",2385,"/// property-synthesis:\n/// @synthesize property-ivar-list \';\'\n///\n/// property-ivar-list:\n/// property-ivar\n/// property-ivar-list \',\' property-ivar\n///\n/// property-ivar:\n/// identifier\n/// identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n // ...\n while (true) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::err_synthesized_property_name);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/objc-synthesized-recover.m"]={"clang/test/Parser/objc-synthesized-recover.m:13:20: error: expected a property name in @synthesize"} | ["clang/test/Parser/objc-synthesized-recover.m"]={"clang/test/Parser/objc-synthesized-recover.m:13:20: error: expected a property name in @synthesize"} | ||
Line 4,993: | Line 4,993: | ||
[h]="ARC Weak References", | [h]="ARC Weak References", | ||
[e]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:"}, | [e]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:"}, | ||
[k]={{W,1253,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n if (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}, | [k]={{W,1253,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n // ...\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:28:13: error: cannot synthesize weak property in file using manual reference counting","clang/test/SemaObjC/mrc-no-weak.m:34:1: error: cannot synthesize weak property in file using manual reference counting"} | ["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:28:13: error: cannot synthesize weak property in file using manual reference counting","clang/test/SemaObjC/mrc-no-weak.m:34:1: error: cannot synthesize weak property in file using manual reference counting"} | ||
Line 5,008: | Line 5,008: | ||
[h]="ARC Weak References", | [h]="ARC Weak References", | ||
[e]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:"}, | [e]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:"}, | ||
[k]={{W,1254,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n if (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}, | [k]={{W,1254,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n if (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n // ...\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:60:13: error: cannot synthesize weak property because the current deployment target does not support weak references"} | ["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:60:13: error: cannot synthesize weak property because the current deployment target does not support weak references"} | ||
Line 5,023: | Line 5,023: | ||
[h]=p, | [h]=p, | ||
[e]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12","[SystemZ] Support transactional execution on zEC12"}, | [e]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12","[SystemZ] Support transactional execution on zEC12"}, | ||
[k]={{w,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == SystemZ::BI__builtin_tabort) {\n if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}}, | [k]={{w,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == SystemZ::BI__builtin_tabort) {\n // ...\n if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CodeGen/SystemZ/builtins-systemz-error.c"]={"clang/test/CodeGen/SystemZ/builtins-systemz-error.c:6:21: error: invalid transaction abort code","clang/test/CodeGen/SystemZ/builtins-systemz-error.c:7:21: error: invalid transaction abort code"} | ["clang/test/CodeGen/SystemZ/builtins-systemz-error.c"]={"clang/test/CodeGen/SystemZ/builtins-systemz-error.c:6:21: error: invalid transaction abort code","clang/test/CodeGen/SystemZ/builtins-systemz-error.c:7:21: error: invalid transaction abort code"} | ||
Line 5,038: | Line 5,038: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,17451,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}}, | [k]={{u,17451,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n // ...\n Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:17:8: error: definition of type \'Y2\' conflicts with typedef of the same name"} | ["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:17:8: error: definition of type \'Y2\' conflicts with typedef of the same name"} | ||
Line 5,053: | Line 5,053: | ||
[h]=p, | [h]=p, | ||
[e]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a...","Perform a bounds check on a function\'s argument list before accessing any index value specified by an \'argument_with_type_tag\' attribute. Fixes PR28520."}, | [e]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a...","Perform a bounds check on a function\'s argument list before accessing any index value specified by an \'argument_with_type_tag\' attribute. Fixes PR28520."}, | ||
[k]={{w,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n if (TypeTagIdxAST >= ExprArgs.size()) {\n Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{w,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n if (ArgumentIdxAST >= ExprArgs.size()) {\n Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}}, | [k]={{w,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n // ...\n if (TypeTagIdxAST >= ExprArgs.size()) {\n Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{w,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n // ...\n if (ArgumentIdxAST >= ExprArgs.size()) {\n Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/error-type-safety.cpp"]={"clang/test/Sema/error-type-safety.cpp:45:22: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:46:24: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:47:26: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:48:28: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:50:35: error: argument index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:51:37: error: argument index 4 is greater than the number of arguments specified"} | ["clang/test/Sema/error-type-safety.cpp"]={"clang/test/Sema/error-type-safety.cpp:45:22: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:46:24: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:47:26: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:48:28: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:50:35: error: argument index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:51:37: error: argument index 4 is greater than the number of arguments specified"} | ||
Line 5,068: | Line 5,068: | ||
[h]=p, | [h]=p, | ||
[e]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same"}, | [e]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same"}, | ||
[k]={{u,17442,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}}, | [k]={{u,17442,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/elaborated-type-specifier.cpp"]={"clang/test/SemaCXX/elaborated-type-specifier.cpp:61:10: error: implicit declaration introduced by elaborated type conflicts with a template of the same name"} | ["clang/test/SemaCXX/elaborated-type-specifier.cpp"]={"clang/test/SemaCXX/elaborated-type-specifier.cpp:61:10: error: implicit declaration introduced by elaborated type conflicts with a template of the same name"} | ||
Line 5,083: | Line 5,083: | ||
[h]=p, | [h]=p, | ||
[e]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same"}, | [e]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same"}, | ||
[k]={{u,17429,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{s,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{s,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n if (!ClassTemplate) {\n Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}}, | [k]={{u,17429,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{s,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n // ...\n if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n // ...\n Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{s,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n // ...\n if (!ClassTemplate) {\n // ...\n Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"} | ["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"} | ||
Line 5,098: | Line 5,098: | ||
[h]=p, | [h]=p, | ||
[e]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates. Angst about same.","Improved representation and support for friend class templates. Angst about same."}, | [e]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates. Angst about same.","Improved representation and support for friend class templates. Angst about same."}, | ||
[k]={{A,17444,"/// Handle a friend type declaration. This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class. So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n/// friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n/// template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n // This is definitely an error in C++98. It\'s probably meant to\n // be forbidden in C++0x, too, but the specification is just\n // poorly written.\n //\n // The problem is with declarations like the following:\n // template <T> friend A<T>::foo;\n // where deciding whether a class C is a friend or not now hinges\n // on whether there exists an instantiation of A that causes\n // \'foo\' to equal C. There are restrictions on class-heads\n // (which we declare (by fiat) elaborated friend declarations to\n // be) that makes this tractable.\n //\n // FIXME: handle \"template <> friend class A<T>;\", which\n // is possibly well-formed? Who even knows?\n if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}}, | [k]={{A,17444,"/// Handle a friend type declaration. This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class. So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n/// friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n/// template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n // ...\n // This is definitely an error in C++98. It\'s probably meant to\n // be forbidden in C++0x, too, but the specification is just\n // poorly written.\n //\n // The problem is with declarations like the following:\n // template <T> friend A<T>::foo;\n // where deciding whether a class C is a friend or not now hinges\n // on whether there exists an instantiation of A that causes\n // \'foo\' to equal C. There are restrictions on class-heads\n // (which we declare (by fiat) elaborated friend declarations to\n // be) that makes this tractable.\n //\n // FIXME: handle \"template <> friend class A<T>;\", which\n // is possibly well-formed? Who even knows?\n if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp:11:22: error: friend type templates must use an elaborated type"} | ["clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp:11:22: error: friend type templates must use an elaborated type"} | ||
Line 5,113: | Line 5,113: | ||
[h]=a, | [h]=a, | ||
[e]={Yb,1616787805,mb,mb}, | [e]={Yb,1616787805,mb,mb}, | ||
[k]={{u,11477,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n // of a previous member of the MultiVersion set.\n for (NamedDecl *ND : Previous) {\n case MultiVersionKind::TargetClones: {\n if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}}, | [k]={{u,11477,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n // ...\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 // ...\n case MultiVersionKind::TargetClones: {\n // ...\n if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:27:92: error: \'target_clones\' attribute does not match previous declaration","clang/test/Sema/attr-target-clones-aarch64.c:37:65: error: \'target_clones\' attribute does not match previous declaration"} | ["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:27:92: error: \'target_clones\' attribute does not match previous declaration","clang/test/Sema/attr-target-clones-aarch64.c:37:65: error: \'target_clones\' attribute does not match previous declaration"} | ||
Line 5,128: | Line 5,128: | ||
[h]=a, | [h]=a, | ||
[e]={Yb,1616787805,mb,mb}, | [e]={Yb,1616787805,mb,mb}, | ||
[k]={{V,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!HasDefault) {\n S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}}, | [k]={{V,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!HasDefault) {\n S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:4:21: error: \'target_clones\' multiversioning requires a default target"} | ["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:4:21: error: \'target_clones\' multiversioning requires a default target"} | ||
Line 5,143: | Line 5,143: | ||
[h]=a, | [h]=a, | ||
[e]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets."}, | [e]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets."}, | ||
[k]={{Ub,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // Set the target ABI if specified.\n if (!Opts->ABI.empty() && !Target->setABI(Opts->ABI)) {\n Diags.Report(diag::err_target_unknown_abi) << Opts->ABI;"}} | [k]={{Ub,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\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 5,155: | Line 5,155: | ||
[h]=a, | [h]=a, | ||
[e]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).","ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."}, | [e]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).","ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."}, | ||
[k]={{Ub,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // Set the target CPU if specified.\n if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{Ub,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // Check the TuneCPU name if specified.\n if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}}, | [k]={{Ub,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Set the target CPU if specified.\n if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{Ub,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Check the TuneCPU name if specified.\n if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"} | ["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"} | ||
Line 5,170: | Line 5,170: | ||
[h]=a, | [h]=a, | ||
[e]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86."}, | [e]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86."}, | ||
[k]={{Ub,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // Set the fp math unit.\n if (!Opts->FPMath.empty() && !Target->setFPMath(Opts->FPMath)) {\n Diags.Report(diag::err_target_unknown_fpmath) << Opts->FPMath;"}} | [k]={{Ub,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\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 5,182: | Line 5,182: | ||
[h]=a, | [h]=a, | ||
[e]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets."}, | [e]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets."}, | ||
[k]={{Ub,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n if (!Target) {\n Diags.Report(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/CrossWindows.cpp",98,"void tools::CrossWindows::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n default:\n D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/lib/Driver/ToolChains/Gnu.cpp",453,"void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n } else {\n D.Diag(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/MinGW.cpp",139,"void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n default:\n D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/tools/driver/cc1as_main.cpp",390,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n if (!TheTarget)\n return Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/tools/driver/cc1as_main.cpp",574,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n if (!TAP)\n Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/unittests/Basic/DiagnosticTest.cpp",42,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n {\n Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}} | [k]={{Ub,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\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 // ...\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 // ...\n if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n // ...\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 // ...\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 // ...\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 // ...\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 {\n // ...\n Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}} | ||
}, | }, | ||
["err_target_unsupported_abi"]={ | ["err_target_unsupported_abi"]={ | ||
Line 5,194: | Line 5,194: | ||
[h]=a, | [h]=a, | ||
[e]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."}, | [e]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."}, | ||
[k]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // 64-bit ABI\'s require 64-bit CPU\'s.\n if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}} | [k]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // ...\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 5,217: | Line 5,217: | ||
[h]=a, | [h]=a, | ||
[e]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM","Driver: add target definition for Windows on ARM"}, | [e]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM","Driver: add target definition for Windows on ARM"}, | ||
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n if (Failure || Version < 7)\n D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n default:\n D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n if (Arch == llvm::Triple::x86)\n else if (Arch == llvm::Triple::arm)\n else if (Arch == llvm::Triple::x86_64)\n else if (Arch == llvm::Triple::mipsel)\n else\n D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}} | [k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n // ...\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 // ...\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 // ...\n if (Arch == llvm::Triple::x86)\n // ...\n else if (Arch == llvm::Triple::arm)\n // ...\n else if (Arch == llvm::Triple::x86_64)\n // ...\n else if (Arch == llvm::Triple::mipsel)\n // ...\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 5,241: | Line 5,241: | ||
[h]=a, | [h]=a, | ||
[e]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen","[ARM] Implement execute-only support in CodeGen"}, | [e]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen","[ARM] Implement execute-only support in CodeGen"}, | ||
[k]={{Zb,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // Generate execute-only output (no data access to code sections).\n // This only makes sense for the compiler, not for the assembler.\n // It\'s not needed for multilib selection and may hide an unused\n // argument diagnostic if the code is always run.\n if (!ForAS && !ForMultilib) {\n // Supported only on ARMv6T2 and ARMv7 and above.\n // Cannot be combined with -mno-movt.\n if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n if (A->getOption().matches(options::OPT_mexecute_only)) {\n if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n D.Diag(diag::err_target_unsupported_execute_only) << Triple.getArchName();"}} | [k]={{Zb,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\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 5,253: | Line 5,253: | ||
[h]=a, | [h]=a, | ||
[e]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86."}, | [e]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86."}, | ||
[k]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n // matches the selected sse level.\n if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}} | [k]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // ...\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 // ...\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 5,265: | Line 5,265: | ||
[h]=a, | [h]=a, | ||
[e]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro","[ARM][CMSE] Add commandline option and feature macro"}, | [e]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro","[ARM][CMSE] Add commandline option and feature macro"}, | ||
[k]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // This does not diagnose illegal cases like having both\n // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n for (const auto &Feature : Features) {\n if (Feature == \"+soft-float\") {\n } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n } else if (Feature == \"+neon\") {\n } else if (Feature == \"+hwdiv\") {\n } else if (Feature == \"+hwdiv-arm\") {\n } else if (Feature == \"+crc\") {\n } else if (Feature == \"+crypto\") {\n } else if (Feature == \"+sha2\") {\n } else if (Feature == \"+aes\") {\n } else if (Feature == \"+dsp\") {\n } else if (Feature == \"+fp64\") {\n } else if (Feature == \"+8msecext\") {\n if (CPUProfile != \"M\" || ArchVersion != 8) {\n Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}} | [k]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // ...\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 // ...\n } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n // ...\n } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n // ...\n } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n // ...\n } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n // ...\n } else if (Feature == \"+neon\") {\n // ...\n } else if (Feature == \"+hwdiv\") {\n // ...\n } else if (Feature == \"+hwdiv-arm\") {\n // ...\n } else if (Feature == \"+crc\") {\n // ...\n } else if (Feature == \"+crypto\") {\n // ...\n } else if (Feature == \"+sha2\") {\n // ...\n } else if (Feature == \"+aes\") {\n // ...\n } else if (Feature == \"+dsp\") {\n // ...\n } else if (Feature == \"+fp64\") {\n // ...\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 5,277: | Line 5,277: | ||
[h]=a, | [h]=a, | ||
[e]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for"}, | [e]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for"}, | ||
[k]={{Zb,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n if ((ThreadPointer == ReadTPMode::TPIDRURW || ThreadPointer == ReadTPMode::TPIDRURO || ThreadPointer == ReadTPMode::TPIDRPRW) && !isHardTPSupported(Triple) && !ForAS) {\n D.Diag(diag::err_target_unsupported_tp_hard) << Triple.getArchName();"},{"clang/lib/Driver/ToolChains/Clang.cpp",3397,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n // Check whether the target subarch supports the hardware TLS register\n if (!arm::isHardTPSupported(EffectiveTriple)) {\n D.Diag(diag::err_target_unsupported_tp_hard) << EffectiveTriple.getArchName();"}} | [k]={{Zb,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n // ...\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 // ...\n if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n // ...\n if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n // ...\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 5,289: | Line 5,289: | ||
[h]="OpenMP Issue", | [h]="OpenMP Issue", | ||
[e]={ac,1615397021,hb,hb}, | [e]={ac,1615397021,hb,hb}, | ||
[k]={{yb,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n auto CheckDeviceType = [&](QualType Ty) {\n if (Ty->isBitIntType()) {\n if (!Context.getTargetInfo().hasBitIntType()) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n auto CheckDeviceType = [&](QualType Ty) {\n if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{w,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n case PPC::BI__builtin_ppc_minfs: {\n if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}}, | [k]={{yb,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckDeviceType = [&](QualType Ty) {\n // ...\n if (Ty->isBitIntType()) {\n if (!Context.getTargetInfo().hasBitIntType()) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckDeviceType = [&](QualType Ty) {\n // ...\n if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // ...\n if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{yb,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // ...\n if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{w,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_maxfe:\n case PPC::BI__builtin_ppc_minfe:\n case PPC::BI__builtin_ppc_maxfl:\n case PPC::BI__builtin_ppc_minfl:\n case PPC::BI__builtin_ppc_maxfs:\n case PPC::BI__builtin_ppc_minfs: {\n if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCUDA/spirv-int128.cu"]={"clang/test/SemaCUDA/spirv-int128.cu:15:10: error: \'d_glb\' requires 128 bit size \'__int128\' type support, but target \'spirv64\' does not support it"} | ["clang/test/SemaCUDA/spirv-int128.cu"]={"clang/test/SemaCUDA/spirv-int128.cu:15:10: error: \'d_glb\' requires 128 bit size \'__int128\' type support, but target \'spirv64\' does not support it"} | ||
Line 5,304: | Line 5,304: | ||
[h]=a, | [h]=a, | ||
[e]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets","Emit diagnostic for -munaligned-access on v6m targets"}, | [e]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets","Emit diagnostic for -munaligned-access on v6m targets"}, | ||
[k]={{Zb,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // Kernel code has more strict alignment requirements.\n if (KernelOrKext) {\n } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n if (A->getOption().matches(options::OPT_munaligned_access)) {\n // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{Zb,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // Kernel code has more strict alignment requirements.\n if (KernelOrKext) {\n } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n if (A->getOption().matches(options::OPT_munaligned_access)) {\n // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n // v8M Baseline follows on from v6M, so doesn\'t support unaligned memory\n // access either.\n else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)\n D.Diag(diag::err_target_unsupported_unaligned) << \"v8m.base\";"}} | [k]={{Zb,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Kernel code has more strict alignment requirements.\n if (KernelOrKext) {\n // ...\n } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n if (A->getOption().matches(options::OPT_munaligned_access)) {\n // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{Zb,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Kernel code has more strict alignment requirements.\n if (KernelOrKext) {\n // ...\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 // ...\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 5,316: | Line 5,316: | ||
[h]=a, | [h]=a, | ||
[e]={db,1590001902,N,N}, | [e]={db,1590001902,N,N}, | ||
[k]={{V,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // A function cannot be have both regular and leaf membership in the same TCB.\n if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{V,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}}, | [k]={{V,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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 // ...\n S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{V,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n // ...\n if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-enforce-tcb-errors.cpp"]={"clang/test/Sema/attr-enforce-tcb-errors.cpp:21:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:28:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:36:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:43:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:75:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive"} | ["clang/test/Sema/attr-enforce-tcb-errors.cpp"]={"clang/test/Sema/attr-enforce-tcb-errors.cpp:21:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:28:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:36:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:43:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:75:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive"} | ||
Line 5,331: | Line 5,331: | ||
[h]=p, | [h]=p, | ||
[e]={"e1314a64b803",1261112541,Bb,Bb}, | [e]={"e1314a64b803",1261112541,Bb,Bb}, | ||
[k]={{M,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n case OR_Ambiguous:\n CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AmbiguousCandidates, CurInitExpr);"}} | [k]={{M,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\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 5,343: | Line 5,343: | ||
[h]=p, | [h]=p, | ||
[e]={"e1314a64b803",1261112541,Bb,Bb}, | [e]={"e1314a64b803",1261112541,Bb,Bb}, | ||
[k]={{M,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n case OR_Deleted:\n S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}}, | [k]={{M,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n case OR_Deleted:\n S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:55:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:60:13: error: copying variable of type \'Derived\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:143:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:146:13: error: copying variable of type \'Derived\' invokes deleted constructor"} | ["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:55:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:60:13: error: copying variable of type \'Derived\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:143:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:146:13: error: copying variable of type \'Derived\' invokes deleted constructor"} | ||
Line 5,358: | Line 5,358: | ||
[h]=p, | [h]=p, | ||
[e]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure","When we attempt to create a temporary object of class type, be sure"}, | [e]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure","When we attempt to create a temporary object of class type, be sure"}, | ||
[k]={{M,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}} | [k]={{M,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}} | ||
}, | }, | ||
["err_temp_copy_no_viable"]={ | ["err_temp_copy_no_viable"]={ | ||
Line 5,370: | Line 5,370: | ||
[h]=p, | [h]=p, | ||
[e]={"e1314a64b803",1261112541,Bb,Bb}, | [e]={"e1314a64b803",1261112541,Bb,Bb}, | ||
[k]={{M,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n case OR_No_Viable_Function:\n CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}}, | [k]={{M,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n case OR_No_Viable_Function:\n CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/copy-initialization.cpp"]={"clang/test/SemaCXX/copy-initialization.cpp:44:7: error: no viable constructor copying parameter of type \'const Foo\'"} | ["clang/test/SemaCXX/copy-initialization.cpp"]={"clang/test/SemaCXX/copy-initialization.cpp:44:7: error: no viable constructor copying parameter of type \'const Foo\'"} | ||
Line 5,385: | Line 5,385: | ||
[h]=p, | [h]=p, | ||
[e]={"b242683d9992",1270146755,Ib,Ib}, | [e]={"b242683d9992",1270146755,Ib,Ib}, | ||
[k]={{s,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (AddressTaken && ParamType->isReferenceType()) {\n // If we originally had an address-of operator, but the\n // parameter has reference type, complain and (if things look\n // like they will work) drop the address-of operator.\n if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{s,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (AddressTaken && ParamType->isReferenceType()) {\n S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}}, | [k]={{s,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (AddressTaken && ParamType->isReferenceType()) {\n // If we originally had an address-of operator, but the\n // parameter has reference type, complain and (if things look\n // like they will work) drop the address-of operator.\n if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{s,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (AddressTaken && ParamType->isReferenceType()) {\n // ...\n S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:116:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:118:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:129:9: error: address taken in non-type template argument for template parameter of reference type \'const int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:136:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:138:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:140:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:146:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'"} | ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:116:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:118:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:129:9: error: address taken in non-type template argument for template parameter of reference type \'const int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:136:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:138:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:140:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:146:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'"} | ||
Line 5,400: | Line 5,400: | ||
[h]=p, | [h]=p, | ||
[e]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context.","Fix template argument deduction when only some of a parameter pack is a non-deduced context."}, | [e]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context.","Fix template argument deduction when only some of a parameter pack is a non-deduced context."}, | ||
[k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n if (Arg.getKind() == TemplateArgument::Pack) {\n for (const auto &P : Arg.pack_elements()) {\n if (P.isNull()) {\n S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}} | [k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n // ...\n if (Arg.getKind() == TemplateArgument::Pack) {\n // ...\n for (const auto &P : Arg.pack_elements()) {\n // ...\n if (P.isNull()) {\n // ...\n S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}} | ||
}, | }, | ||
["err_template_arg_field"]={ | ["err_template_arg_field"]={ | ||
Line 5,412: | Line 5,412: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // Cannot refer to non-static data members\n if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}}, | [k]={{s,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // Cannot refer to non-static data members\n if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:169:9: error: non-type template argument refers to non-static data member \'NonStaticMember\'"} | ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:169:9: error: non-type template argument refers to non-static data member \'NonStaticMember\'"} | ||
Line 5,427: | Line 5,427: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{s,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}}, | [k]={{s,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n // ...\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}}, | ||
[o]={ | [o]={ | ||
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31:4: error: non-type template argument \'(int *)1\' is invalid"} | [Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31:4: error: non-type template argument \'(int *)1\' is invalid"} | ||
Line 5,442: | Line 5,442: | ||
[h]=p, | [h]=p, | ||
[e]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute","[clang] Add no_builtin attribute"}, | [e]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute","[clang] Add no_builtin attribute"}, | ||
[k]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n if (!Satisfaction.IsSatisfied) {\n Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}}, | [k]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n // ...\n if (!Satisfaction.IsSatisfied) {\n // ...\n Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:14:17: error: constraints not satisfied for class template \'is_same\' [with T = char, U = char]"} | ["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:14:17: error: constraints not satisfied for class template \'is_same\' [with T = char, U = char]"} | ||
Line 5,457: | Line 5,457: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{s,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n // If we have an expanded parameter pack, make sure we don\'t have too\n // many arguments.\n if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n if (*Expansions == SugaredArgumentPack.size()) {\n } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{s,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // If we have any leftover arguments, then there were too many arguments.\n // Complain and fail.\n if (ArgIdx < NumArgs) {\n Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}}, | [k]={{s,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n // ...\n S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{s,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\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 // ...\n } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n // ...\n Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{s,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\n // If we have any leftover arguments, then there were too many arguments.\n // Complain and fail.\n if (ArgIdx < NumArgs) {\n Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:28: error: too few template arguments for class template \'A\'"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:28: error: too few template arguments for class template \'A\'"} | ||
Line 5,472: | Line 5,472: | ||
[h]=p, | [h]=p, | ||
[e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."}, | [e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."}, | ||
[k]={{s,7325,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n if (getLangOpts().CPlusPlus17) {\n case APValue::MemberPointer: {\n // FIXME: We need TemplateArgument representation and mangling for these.\n if (!Value.getMemberPointerPath().empty()) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}}, | [k]={{s,7325,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n if (getLangOpts().CPlusPlus17) {\n // ...\n case APValue::MemberPointer: {\n // ...\n // FIXME: We need TemplateArgument representation and mangling for these.\n if (!Value.getMemberPointerPath().empty()) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:100:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:101:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:105:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:109:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:110:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:114:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:208:34: error: sorry, non-type template argument of pointer-to-member type \'int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:210:34: error: sorry, non-type template argument of pointer-to-member type \'const int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet"} | ["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:100:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:101:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:105:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:109:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:110:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:114:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:208:34: error: sorry, non-type template argument of pointer-to-member type \'int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:210:34: error: sorry, non-type template argument of pointer-to-member type \'const int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet"} | ||
Line 5,487: | Line 5,487: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // Cannot refer to non-static member functions\n if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n if (!Method->isStatic()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_method) << Method << Arg->getSourceRange();"}} | [k]={{s,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\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 5,499: | Line 5,499: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n case TemplateArgument::TemplateExpansion:\n Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{s,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n case TemplateArgument::Type: {\n if (T->isFunctionType())\n else\n Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}}, | [k]={{s,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Template:\n case TemplateArgument::TemplateExpansion:\n // ...\n Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{s,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Type: {\n // ...\n if (T->isFunctionType())\n // ...\n else\n Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:7:11: error: template argument for non-type template parameter must be an expression"} | ["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:7:11: error: template argument for non-type template parameter must be an expression"} | ||
Line 5,514: | Line 5,514: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n case TemplateArgument::Type:\n Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}}, | [k]={{s,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n case TemplateArgument::Expression:\n case TemplateArgument::Type:\n // ...\n Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:49:20: error: template argument for template template parameter must be a class template or type alias template"} | ["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:49:20: error: template argument for template template parameter must be a class template or type alias template"} | ||
Line 5,529: | Line 5,529: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n default: {\n Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}}, | [k]={{s,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n // ...\n default: {\n // ...\n Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:41:4: error: template argument for template type parameter must be a type"} | ["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:41:4: error: template argument for template type parameter must be a type"} | ||
Line 5,544: | Line 5,544: | ||
[h]=p, | [h]=p, | ||
[e]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler","Suggest adding \'typename\' when it would make the compiler"}, | [e]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler","Suggest adding \'typename\' when it would make the compiler"}, | ||
[k]={{s,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n case TemplateArgument::Expression: {\n if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}}, | [k]={{s,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n // ...\n case TemplateArgument::Expression: {\n // ...\n if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n // ...\n if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n // ...\n Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:192:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:165:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:185:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:210:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:217:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?"} | ["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:192:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:165:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:185:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:210:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:217:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?"} | ||
Line 5,559: | Line 5,559: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n } else {\n // At this point, the template argument refers to an object or\n // function with external linkage. We now need to check whether the\n // argument and parameter types are compatible.\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n // We can\'t perform this conversion or binding.\n if (ParamType->isReferenceType())\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}}, | [k]={{s,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n // ...\n // At this point, the template argument refers to an object or\n // function with external linkage. We now need to check whether the\n // argument and parameter types are compatible.\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n // We can\'t perform this conversion or binding.\n if (ParamType->isReferenceType())\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp:237:43: error: non-type template parameter of reference type \'float &\' cannot bind to template argument of type \'int\'"} | ["clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp:237:43: error: non-type template parameter of reference type \'float &\' cannot bind to template argument of type \'int\'"} | ||
Line 5,574: | Line 5,574: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n case TemplateArgument::Type: {\n if (T->isFunctionType())\n Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}}, | [k]={{s,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Type: {\n // ...\n if (T->isFunctionType())\n Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:6:3: error: template argument for non-type template parameter is treated as function type \'int ()\'"} | ["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:6:3: error: template argument for non-type template parameter is treated as function type \'int ()\'"} | ||
Line 5,589: | Line 5,589: | ||
[h]=p, | [h]=p, | ||
[e]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on"}, | [e]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on"}, | ||
[k]={{s,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}}, | [k]={{s,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n // ...\n S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: error: non-type template argument of type \'std::nullptr_t\' is not a constant expression","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:30:4: error: non-type template argument of type \'int *\' is not a constant expression"} | [Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: error: non-type template argument of type \'std::nullptr_t\' is not a constant expression","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:30:4: error: non-type template argument of type \'int *\' is not a constant expression"} | ||
Line 5,604: | Line 5,604: | ||
[h]=p, | [h]=p, | ||
[e]={"b242683d9992",1270146755,Ib,Ib}, | [e]={"b242683d9992",1270146755,Ib,Ib}, | ||
[k]={{s,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // If the template parameter has pointer type, either we must have taken the\n // address or the argument must decay to a pointer.\n if (!AddressTaken && ParamType->isPointerType()) {\n if (Func) {\n } else if (Entity->getType()->isArrayType()) {\n } else {\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{s,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // If the template parameter has pointer type, either we must have taken the\n // address or the argument must decay to a pointer.\n if (!AddressTaken && ParamType->isPointerType()) {\n if (Func) {\n } else if (Entity->getType()->isArrayType()) {\n } else {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}}, | [k]={{s,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\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 // ...\n } else if (Entity->getType()->isArrayType()) {\n // ...\n } else {\n // ...\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{s,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\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 // ...\n } else if (Entity->getType()->isArrayType()) {\n // ...\n } else {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:148:25: error: non-type template argument for template parameter of pointer type \'const GUID *\' (aka \'const _GUID *\') must have its address taken"} | ["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:148:25: error: non-type template argument for template parameter of pointer type \'const GUID *\' (aka \'const _GUID *\') must have its address taken"} | ||
Line 5,619: | Line 5,619: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n } else {\n // At this point, the template argument refers to an object or\n // function with external linkage. We now need to check whether the\n // argument and parameter types are compatible.\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n // We can\'t perform this conversion or binding.\n if (ParamType->isReferenceType())\n else\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{s,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{s,7521,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n // Try to convert the argument to the parameter\'s type.\n if (Context.hasSameType(ParamType, ArgType)) {\n } else if (ParamType->isBooleanType()) {\n } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n } else {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{s,7704,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // Deal with parameters of type std::nullptr_t.\n if (ParamType->isNullPtrType()) {\n case NPV_NotNullPointer:\n Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}}, | [k]={{s,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n // ...\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 // ...\n else\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{s,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n // ...\n } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n // ...\n S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{s,7521,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\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 // ...\n // Try to convert the argument to the parameter\'s type.\n if (Context.hasSameType(ParamType, ArgType)) {\n // ...\n } else if (ParamType->isBooleanType()) {\n // ...\n } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n // ...\n } else {\n // ...\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{s,7704,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Deal with parameters of type std::nullptr_t.\n if (ParamType->isNullPtrType()) {\n // ...\n case NPV_NotNullPointer:\n Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}}, | ||
[o]={ | [o]={ | ||
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:68:4: error: non-type template argument of type \'const int\' cannot be converted to a value of type \'std::nullptr_t\'"} | [Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:68:4: error: non-type template argument of type \'const int\' cannot be converted to a value of type \'std::nullptr_t\'"} | ||
Line 5,634: | Line 5,634: | ||
[h]=p, | [h]=p, | ||
[e]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template","Fix PR6159 and several other problems with value-dependent non-type template"}, | [e]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template","Fix PR6159 and several other problems with value-dependent non-type template"}, | ||
[k]={{s,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (S.getLangOpts().MicrosoftExt) {\n if (FirstOpLoc.isValid()) {\n if (FirstOpKind == UO_AddrOf)\n else if (Arg->getType()->isPointerType()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{s,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (!Entity) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{s,7354,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n if (getLangOpts().CPlusPlus17) {\n case APValue::LValue: {\n if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}}, | [k]={{s,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (S.getLangOpts().MicrosoftExt) {\n // ...\n if (FirstOpLoc.isValid()) {\n // ...\n if (FirstOpKind == UO_AddrOf)\n // ...\n else if (Arg->getType()->isPointerType()) {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{s,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (!Entity) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{s,7354,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n if (getLangOpts().CPlusPlus17) {\n // ...\n case APValue::LValue: {\n // ...\n if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/temp_arg_template.cpp"]={"clang/test/SemaTemplate/temp_arg_template.cpp:107:21: error: non-type template argument does not refer to any declaration"} | ["clang/test/SemaTemplate/temp_arg_template.cpp"]={"clang/test/SemaTemplate/temp_arg_template.cpp:107:21: error: non-type template argument does not refer to any declaration"} | ||
Line 5,649: | Line 5,649: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,7496,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n if (!ArgType->isIntegralOrEnumerationType()) {\n } else if (!Arg->isValueDependent()) {\n class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}}, | [k]={{s,7496,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\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 // ...\n if (!ArgType->isIntegralOrEnumerationType()) {\n // ...\n } else if (!Arg->isValueDependent()) {\n class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: error: non-type template argument of type \'int\' is not an integral constant expression"} | ["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: error: non-type template argument of type \'int\' is not an integral constant expression"} | ||
Line 5,664: | Line 5,664: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,7483,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n if (!ArgType->isIntegralOrEnumerationType()) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}}, | [k]={{s,7483,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\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 // ...\n if (!ArgType->isIntegralOrEnumerationType()) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:35:3: error: non-type template argument of type \'X\' must have an integral or enumeration type"} | ["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:35:3: error: non-type template argument of type \'X\' must have an integral or enumeration type"} | ||
Line 5,679: | Line 5,679: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // A non-type template argument must refer to an object or function.\n if (!Func && !Var && !Guid) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_object_or_func) << Arg->getSourceRange();"}} | [k]={{s,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // A non-type template argument must refer to an object or function.\n if (!Func && !Var && !Guid) {\n // ...\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 5,691: | Line 5,691: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (!DRE)\n return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{s,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}}, | [k]={{s,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (!DRE)\n return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{s,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:73:5: error: non-type template argument is not a pointer to member constant"} | ["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:73:5: error: non-type template argument is not a pointer to member constant"} | ||
Line 5,706: | Line 5,706: | ||
[h]=p, | [h]=p, | ||
[e]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases.","[NFC] Tweak diagnostic for template template arguments, to include template aliases."}, | [e]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases.","[NFC] Tweak diagnostic for template template arguments, to include template aliases."}, | ||
[k]={{s,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n if (!Default.isInvalid()) {\n if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{s,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n // C++0x [temp.arg.template]p1:\n // A template-argument for a template template-parameter shall be\n // the name of a class template or an alias template, expressed as an\n // id-expression. When the template-argument names a class template, only\n // primary class templates are considered when matching the\n // template template argument with the corresponding parameter;\n // partial specializations are not considered even if their\n // parameter lists match that of the template template parameter.\n //\n // Note that we also allow template template parameters here, which\n // will happen when we are dealing with, e.g., class template\n // partial specializations.\n if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}} | [k]={{s,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // ...\n if (!Default.isInvalid()) {\n // ...\n if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{s,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n // ...\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 // ...\n Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}} | ||
}, | }, | ||
["err_template_arg_object_no_linkage"]={ | ["err_template_arg_object_no_linkage"]={ | ||
Line 5,718: | Line 5,718: | ||
[h]=p, | [h]=p, | ||
[e]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | [e]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | ||
[k]={{s,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // Address / reference template args must have external linkage in C++98.\n if (Entity->getFormalLinkage() == InternalLinkage) {\n } else if (!Entity->hasLinkage()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}}, | [k]={{s,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // Address / reference template args must have external linkage in C++98.\n if (Entity->getFormalLinkage() == InternalLinkage) {\n // ...\n } else if (!Entity->hasLinkage()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:168:9: error: non-type template argument refers to function \'f\' that does not have linkage"} | ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:168:9: error: non-type template argument refers to function \'f\' that does not have linkage"} | ||
Line 5,733: | Line 5,733: | ||
[h]=p, | [h]=p, | ||
[e]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the","When a template-id refers to a single function template, and the"}, | [e]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the","When a template-id refers to a single function template, and the"}, | ||
[k]={{s,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n if (CanonArg->isVariablyModifiedType()) {\n } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {\n return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;"}} | [k]={{s,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n // ...\n if (CanonArg->isVariablyModifiedType()) {\n // ...\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 5,745: | Line 5,745: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n } else {\n if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n if (!ParamRef->getPointeeType()->isFunctionType()) {\n if ((ParamQuals | ArgQuals) != ParamQuals) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}}, | [k]={{s,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n if (!ParamRef->getPointeeType()->isFunctionType()) {\n // ...\n if ((ParamQuals | ArgQuals) != ParamQuals) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:119:8: error: reference binding of non-type template parameter of type \'int &\' to template argument of type \'const int\' ignores qualifiers"} | ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:119:8: error: reference binding of non-type template parameter of type \'int &\' to template argument of type \'const int\' ignores qualifiers"} | ||
Line 5,760: | Line 5,760: | ||
[h]=p, | [h]=p, | ||
[e]={"b242683d9992",1270146755,Ib,Ib}, | [e]={"b242683d9992",1270146755,Ib,Ib}, | ||
[k]={{s,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (Var) {\n // A value of reference type is not an object.\n if (Var->getType()->isReferenceType()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}}, | [k]={{s,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (Var) {\n // A value of reference type is not an object.\n if (Var->getType()->isReferenceType()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp:154:9: error: non-type template argument of reference type \'int &\' is not an object"} | ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp:154:9: error: non-type template argument of reference type \'int &\' is not an object"} | ||
Line 5,775: | Line 5,775: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // Check the actual kind (type, non-type, template).\n if (Old->getKind() != New->getKind()) {\n if (Complain) {\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // Check that both are parameter packs or neither are parameter packs.\n // However, if we are matching a template template argument to a\n // template template parameter, the template template parameter can have\n // a parameter pack where the template template argument does not.\n if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n if (Complain) {\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // If we are matching a template template argument to a template\n // template parameter and one of the non-type template parameter types\n // is dependent, then we must wait until template instantiation time\n // to actually compare the arguments.\n if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}}, | [k]={{s,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // Check the actual kind (type, non-type, template).\n if (Old->getKind() != New->getKind()) {\n if (Complain) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\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 // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // ...\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 // ...\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{s,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:36:14: error: template template argument has different template parameters than its corresponding template template parameter"} | ["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:36:14: error: template template argument has different template parameters than its corresponding template template parameter"} | ||
Line 5,790: | Line 5,790: | ||
[h]=p, | [h]=p, | ||
[e]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | [e]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | ||
[k]={{s,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n if (Var) {\n // A template argument must have static storage duration.\n if (Var->getTLSKind()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}}, | [k]={{s,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (Var) {\n // ...\n // A template argument must have static storage duration.\n if (Var->getTLSKind()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:33:4: error: non-type template argument refers to thread-local object"} | [Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:33:4: error: non-type template argument refers to thread-local object"} | ||
Line 5,805: | Line 5,805: | ||
[h]=p, | [h]=p, | ||
[e]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type","Implement support for null non-type template arguments for non-type"}, | [e]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type","Implement support for null non-type template arguments for non-type"}, | ||
[k]={{s,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // If we don\'t have a null pointer value, but we do have a NULL pointer\n // constant, suggest a cast to the appropriate type.\n if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}}, | [k]={{s,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\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 // ...\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}}, | ||
[o]={ | [o]={ | ||
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:21:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:22:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:40:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:41:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:51:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:52:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:66:4: error: null non-type template argument must be cast to template parameter type \'std::nullptr_t\'"} | [Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:21:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:22:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:40:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:41:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:51:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:52:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:66:4: error: null non-type template argument must be cast to template parameter type \'std::nullptr_t\'"} | ||
Line 5,820: | Line 5,820: | ||
[h]=p, | [h]=p, | ||
[e]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on"}, | [e]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on"}, | ||
[k]={{s,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // - a constant expression that evaluates to a null pointer value (4.10); or\n // - a constant expression that evaluates to a null member pointer value\n // (4.11); or\n if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}}, | [k]={{s,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\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 // ...\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
[Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:29:4: error: null non-type template argument of type \'float *\' does not match template parameter of type \'int *\'"} | [Kb]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:29:4: error: null non-type template argument of type \'float *\' does not match template parameter of type \'int *\'"} | ||
Line 5,835: | Line 5,835: | ||
[h]=v, | [h]=v, | ||
[e]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)","Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"}, | [e]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)","Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"}, | ||
[k]={{Y,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n case ParsedTemplateInfo::ExplicitInstantiation: {\n if (Tok.is(tok::semi)) {\n } else {\n // Check that this is a valid instantiation\n if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{jb,2085,"#include \"clang/Basic/TransformTypeTraits.def\"\n if (TemplateId) {\n } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n } else {\n if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{bc,334,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}}, | [k]={{Y,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n // ...\n case ParsedTemplateInfo::ExplicitInstantiation: {\n if (Tok.is(tok::semi)) {\n // ...\n } else {\n // ...\n // Check that this is a valid instantiation\n if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{jb,2085,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n if (TemplateId) {\n // ...\n } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n // ...\n } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n // ...\n } else {\n // ...\n if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n // ...\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{bc,334,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n // ...\n if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n // ...\n if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:113:24: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword","clang/test/SemaTemplate/explicit-instantiation.cpp:117:31: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword"} | ["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:113:24: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword","clang/test/SemaTemplate/explicit-instantiation.cpp:117:31: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword"} | ||
Line 5,850: | Line 5,850: | ||
[h]=p, | [h]=p, | ||
[e]={"7c11da0cfd33",1567434909,vb,vb}, | [e]={"7c11da0cfd33",1567434909,vb,vb}, | ||
[k]={{s,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n auto Diagnose = [&] {\n Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}}, | [k]={{s,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n // ...\n auto Diagnose = [&] {\n Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:24:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:27:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:32:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:76:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:80:50: error: requires clause differs in template redeclaration"} | ["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:24:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:27:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:32:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:76:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:80:50: error: requires clause differs in template redeclaration"} | ||
Line 5,865: | Line 5,865: | ||
[h]=p, | [h]=p, | ||
[e]={Qb,1576172311,cb,cb}, | [e]={Qb,1576172311,cb,cb}, | ||
[k]={{s,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n auto Diagnose = [&] {\n S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}}, | [k]={{s,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n // ...\n auto Diagnose = [&] {\n S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:40:11: error: type constraint differs in template redeclaration"} | ["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:40:11: error: type constraint differs in template redeclaration"} | ||
Line 5,880: | Line 5,880: | ||
[h]=p, | [h]=p, | ||
[e]={"349636d2bfc3",1575555459,Ob,Ob}, | [e]={"349636d2bfc3",1575555459,Ob,Ob}, | ||
[k]={{s,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n if (ArgIdx < NumArgs) {\n if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}}, | [k]={{s,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n // ...\n if (ArgIdx < NumArgs) {\n // ...\n if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n // ...\n Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:184:24: error: pack expansion used as argument for non-pack parameter of concept"} | ["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:184:24: error: pack expansion used as argument for non-pack parameter of concept"} | ||
Line 5,895: | Line 5,895: | ||
[h]=p, | [h]=p, | ||
[e]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | [e]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"}, | ||
[k]={{s,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}}, | [k]={{s,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n // ...\n if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n // ...\n Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:104:36: error: template name refers to non-type template \'F\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:106:38: error: template name refers to non-type template \'::F\'"} | ["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:104:36: error: template name refers to non-type template \'F\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:106:38: error: template name refers to non-type template \'::F\'"} | ||
Line 5,910: | Line 5,910: | ||
[h]=p, | [h]=p, | ||
[e]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes","Sema: Do not allow template declarations inside local classes"}, | [e]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes","Sema: Do not allow template declarations inside local classes"}, | ||
[k]={{s,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // C++ [temp]p2:\n // A template-declaration can appear only as a namespace scope or\n // class scope declaration.\n // C++ [temp.expl.spec]p3:\n // An explicit specialization may be declared in any scope in which the\n // corresponding primary template may be defined.\n // C++ [temp.class.spec]p6: [P2096]\n // A partial specialization may be declared in any scope in which the\n // corresponding primary template may be defined.\n if (Ctx) {\n if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n // C++ [temp.mem]p2:\n // A local class shall not have member templates.\n if (RD->isLocalClass())\n return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}}, | [k]={{s,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // ...\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 // ...\n if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n // C++ [temp.mem]p2:\n // A local class shall not have member templates.\n if (RD->isLocalClass())\n return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:8:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:9:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:10:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:11:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:12:5: error: templates cannot be declared inside of a local class"} | ["clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:8:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:9:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:10:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:11:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:12:5: error: templates cannot be declared inside of a local class"} | ||
Line 5,925: | Line 5,925: | ||
[h]=p, | [h]=p, | ||
[e]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We","Semantic analysis for explicit instantiation of class templates. We"}, | [e]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We","Semantic analysis for explicit instantiation of class templates. We"}, | ||
[k]={{s,854,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n if (PatternDef) {\n } else if (InstantiatedFromMember) {\n } else {\n if (isa<FunctionDecl>(Instantiation)) {\n } else if (isa<TagDecl>(Instantiation)) {\n Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}}, | [k]={{s,854,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n // ...\n if (PatternDef) {\n // ...\n } else if (InstantiatedFromMember) {\n // ...\n } else {\n if (isa<FunctionDecl>(Instantiation)) {\n // ...\n } else if (isa<TagDecl>(Instantiation)) {\n Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:10:8: error: implicit instantiation of undefined template \'C2<int>\'"} | ["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:10:8: error: implicit instantiation of undefined template \'C2<int>\'"} | ||
Line 5,940: | Line 5,940: | ||
[h]=p, | [h]=p, | ||
[e]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is","Diagnose attempts to implicitly instantiate a template before it is"}, | [e]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is","Diagnose attempts to implicitly instantiate a template before it is"}, | ||
[k]={{s,827,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n if (PatternDef) {\n Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}}, | [k]={{s,827,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n // ...\n if (PatternDef) {\n Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:21:12: error: implicit instantiation of template \'test1::A<int>\' within its own definition"} | ["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:21:12: error: implicit instantiation of template \'test1::A<int>\' within its own definition"} | ||
Line 5,955: | Line 5,955: | ||
[h]=p, | [h]=p, | ||
[e]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions."}, | [e]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions."}, | ||
[k]={{u,10714,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n if (getLangOpts().OpenCLCPlusPlus) {\n if (FunctionTemplate) {\n Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}}, | [k]={{u,10714,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n // ...\n if (getLangOpts().OpenCLCPlusPlus) {\n // ...\n if (FunctionTemplate) {\n Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:14:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization","clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:18:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization"} | ["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:14:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization","clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:18:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization"} | ||
Line 5,970: | Line 5,970: | ||
[h]=p, | [h]=p, | ||
[e]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually","Improve recovery for template-ids whose template-name doesn\'t actually"}, | [e]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually","Improve recovery for template-ids whose template-name doesn\'t actually"}, | ||
[k]={{r,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n // Handle pseudo-objects in the LHS.\n if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n // template, diagnose the missing \'template\' keyword instead of diagnosing\n // an invalid use of a bound member function.\n //\n // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n // to C++1z [over.over]/1.4, but we already checked for that case above.\n if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{s,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{s,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n // was missing.\n if (MissingTemplateKeyword) {\n Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}}, | [k]={{r,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n // ...\n // Handle pseudo-objects in the LHS.\n if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n // ...\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 // ...\n if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{s,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n // ...\n Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{s,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n // ...\n // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n // was missing.\n if (MissingTemplateKeyword) {\n Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/dependent-template-recover.cpp"]={"clang/test/SemaTemplate/dependent-template-recover.cpp:10:8: error: missing \'template\' keyword prior to dependent template name \'f1\'","clang/test/SemaTemplate/dependent-template-recover.cpp:15:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:16:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:17:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:18:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:20:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:24:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:25:17: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:28:14: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:29:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:33:12: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:34:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:36:15: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:37:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:38:10: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:42:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:68:15: error: missing \'template\' keyword prior to dependent template name \'t\'","clang/test/SemaTemplate/dependent-template-recover.cpp:86:6: error: missing \'template\' keyword prior to dependent template name \'g\'","clang/test/SemaTemplate/dependent-template-recover.cpp:77:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:78:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:79:3: error: missing \'template\' keyword prior to dependent template name \'g\'"} | ["clang/test/SemaTemplate/dependent-template-recover.cpp"]={"clang/test/SemaTemplate/dependent-template-recover.cpp:10:8: error: missing \'template\' keyword prior to dependent template name \'f1\'","clang/test/SemaTemplate/dependent-template-recover.cpp:15:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:16:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:17:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:18:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:20:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:24:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:25:17: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:28:14: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:29:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:33:12: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:34:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:36:15: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:37:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:38:10: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:42:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:68:15: error: missing \'template\' keyword prior to dependent template name \'t\'","clang/test/SemaTemplate/dependent-template-recover.cpp:86:6: error: missing \'template\' keyword prior to dependent template name \'g\'","clang/test/SemaTemplate/dependent-template-recover.cpp:77:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:78:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:79:3: error: missing \'template\' keyword prior to dependent template name \'g\'"} | ||
Line 5,985: | Line 5,985: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{s,5193,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}}, | [k]={{s,5193,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n // ...\n Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/literal-operators.cpp"]={"clang/test/SemaCXX/literal-operators.cpp:52:16: error: \'operator\"\"_foo\' following the \'template\' keyword cannot refer to a dependent template"} | ["clang/test/SemaCXX/literal-operators.cpp"]={"clang/test/SemaCXX/literal-operators.cpp:52:16: error: \'operator\"\"_foo\' following the \'template\' keyword cannot refer to a dependent template"} | ||
Line 6,000: | Line 6,000: | ||
[h]=p, | [h]=p, | ||
[e]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur","Parsing and AST representation for dependent template names that occur"}, | [e]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur","Parsing and AST representation for dependent template names that occur"}, | ||
[k]={{s,557,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n if (Found.empty()) {\n // If a \'template\' keyword was used, a lookup that finds only non-template\n // names is an error.\n if (ExampleLookupResult && RequiredTemplate) {\n Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}}, | [k]={{s,557,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n // ...\n if (Found.empty()) {\n // ...\n // If a \'template\' keyword was used, a lookup that finds only non-template\n // names is an error.\n if (ExampleLookupResult && RequiredTemplate) {\n Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:25:38: error: \'apply\' following the \'template\' keyword does not refer to a template"} | ["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:25:38: error: \'apply\' following the \'template\' keyword does not refer to a template"} | ||
Line 6,015: | Line 6,015: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{s,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}}, | [k]={{s,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // ...\n auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:54:61: error: \'Q::U\' is expected to be a non-type template, but instantiated to a class template"} | ["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:54:61: error: \'Q::U\' is expected to be a non-type template, but instantiated to a class template"} | ||
Line 6,030: | Line 6,030: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n if (Ctx && Ctx->isExternCContext()) {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}}, | [k]={{s,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // ...\n if (Ctx && Ctx->isExternCContext()) {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:12: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:10:3: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:13:5: error: templates must have C++ linkage"} | ["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:12: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:10:3: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:13:5: error: templates must have C++ linkage"} | ||
Line 6,045: | Line 6,045: | ||
[h]=p, | [h]=p, | ||
[e]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan"}, | [e]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan"}, | ||
[k]={{A,3558,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n if (isInstField) {\n // Member field could not be with \"template\" keyword.\n // So TemplateParameterLists should be empty in this case.\n if (TemplateParameterLists.size()) {\n if (TemplateParams->size()) {\n Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}, | [k]={{A,3558,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n // ...\n if (isInstField) {\n // ...\n // Member field could not be with \"template\" keyword.\n // So TemplateParameterLists should be empty in this case.\n if (TemplateParameterLists.size()) {\n // ...\n if (TemplateParams->size()) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"} | ["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"} | ||
Line 6,060: | Line 6,060: | ||
[h]=p, | [h]=p, | ||
[e]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan"}, | [e]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan"}, | ||
[k]={{A,3565,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n if (isInstField) {\n // Member field could not be with \"template\" keyword.\n // So TemplateParameterLists should be empty in this case.\n if (TemplateParameterLists.size()) {\n if (TemplateParams->size()) {\n } else {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}, | [k]={{A,3565,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n // ...\n if (isInstField) {\n // ...\n // Member field could not be with \"template\" keyword.\n // So TemplateParameterLists should be empty in this case.\n if (TemplateParameterLists.size()) {\n // ...\n if (TemplateParams->size()) {\n // ...\n } else {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"} | ["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"} | ||
Line 6,090: | Line 6,090: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{s,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n if (!getLangOpts().CPlusPlus20) {\n Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}}, | [k]={{s,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n // ...\n if (!getLangOpts().CPlusPlus20) {\n // ...\n Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p4.cpp"]={"clang/test/CXX/temp/temp.param/p4.cpp:18:16: error: a non-type template parameter cannot have type \'float\' before C++20"} | ["clang/test/CXX/temp/temp.param/p4.cpp"]={"clang/test/CXX/temp/temp.param/p4.cpp:18:16: error: a non-type template parameter cannot have type \'float\' before C++20"} | ||
Line 6,105: | Line 6,105: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n // there\'s not much more we can say about non-scalar non-class types --\n // because we can\'t see functions or arrays here, those can only be language\n // extensions.\n if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}}, | [k]={{s,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n // there\'s not much more we can say about non-scalar non-class types --\n // because we can\'t see functions or arrays here, those can only be language\n // extensions.\n if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:36:24: error: a non-type template parameter cannot have type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:37:22: error: a non-type template parameter cannot have type \'_Atomic(int)\'"} | ["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:36:24: error: a non-type template parameter cannot have type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:37:22: error: a non-type template parameter cannot have type \'_Atomic(int)\'"} | ||
Line 6,120: | Line 6,120: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // If we are matching a template template argument to a template\n // template parameter and one of the non-type template parameter types\n // is dependent, then we must wait until template instantiation time\n // to actually compare the arguments.\n if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}}, | [k]={{s,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // ...\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 // ...\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:80:28: error: template non-type parameter has a different type \'long\' in template redeclaration","clang/test/SemaTemplate/friend-template.cpp:305:15: error: template non-type parameter has a different type \'char\' in template redeclaration"} | ["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:80:28: error: template non-type parameter has a different type \'long\' in template redeclaration","clang/test/SemaTemplate/friend-template.cpp:305:15: error: template non-type parameter has a different type \'char\' in template redeclaration"} | ||
Line 6,135: | Line 6,135: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{s,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}}, | [k]={{s,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/invalid-template-params.cpp"]={"clang/test/SemaCXX/invalid-template-params.cpp:7:3: error: non-type template parameter has incomplete type \'class UBar\'"} | ["clang/test/SemaCXX/invalid-template-params.cpp"]={"clang/test/SemaCXX/invalid-template-params.cpp:7:3: error: non-type template parameter has incomplete type \'class UBar\'"} | ||
Line 6,150: | Line 6,150: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{s,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n if (RequireLiteralType(Loc, T, diag::err_template_nontype_parm_not_literal))"}} | [k]={{s,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\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 6,162: | Line 6,162: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{s,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}}, | [k]={{s,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:73:14: error: type \'RRef\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:78:17: error: type \'BadBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:83:18: error: type \'BadField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:88:23: error: type \'BadFieldArray\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:92:23: error: type \'ProtectedBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:96:21: error: type \'PrivateBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:100:22: error: type \'Private2Base\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:106:24: error: type \'ProtectedField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:112:22: error: type \'PrivateField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:117:23: error: type \'Private2Field\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:122:22: error: type \'MutableField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:125:36: error: type \'BadExtType<_Atomic(float)>\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:126:34: error: type \'BadExtType<_Atomic(int)>\' of non-type template parameter is not a structural type"} | ["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:73:14: error: type \'RRef\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:78:17: error: type \'BadBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:83:18: error: type \'BadField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:88:23: error: type \'BadFieldArray\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:92:23: error: type \'ProtectedBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:96:21: error: type \'PrivateBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:100:22: error: type \'Private2Base\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:106:24: error: type \'ProtectedField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:112:22: error: type \'PrivateField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:117:23: error: type \'Private2Field\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:122:22: error: type \'MutableField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:125:36: error: type \'BadExtType<_Atomic(float)>\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:126:34: error: type \'BadExtType<_Atomic(int)>\' of non-type template parameter is not a structural type"} | ||
Line 6,177: | Line 6,177: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{s,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // Structural types are required to be object types or lvalue references.\n if (T->isRValueReferenceType()) {\n Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}}, | [k]={{s,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n // Structural types are required to be object types or lvalue references.\n if (T->isRValueReferenceType()) {\n Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:26:16: error: non-type template parameter has rvalue reference type \'int &&\'"} | ["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:26:16: error: non-type template parameter has rvalue reference type \'int &&\'"} | ||
Line 6,192: | Line 6,192: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}}, | [k]={{s,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // ...\n return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:265:5: error: templates can only be declared in namespace or class scope"} | ["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:265:5: error: templates can only be declared in namespace or class scope"} | ||
Line 6,207: | Line 6,207: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{s,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n } else if (InconsistentDefaultArg) {\n Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}} | [k]={{s,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\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 // ...\n } else if (InconsistentDefaultArg) {\n // ...\n Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}} | ||
}, | }, | ||
["err_template_param_default_arg_missing"]={ | ["err_template_param_default_arg_missing"]={ | ||
Line 6,219: | Line 6,219: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n } else if (InconsistentDefaultArg) {\n } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}}, | [k]={{s,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\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 // ...\n } else if (InconsistentDefaultArg) {\n // ...\n } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n // ...\n Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p11.cpp"]={"clang/test/CXX/temp/temp.param/p11.cpp:6:16: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:10:31: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:14:14: error: template parameter missing a default argument"} | ["clang/test/CXX/temp/temp.param/p11.cpp"]={"clang/test/CXX/temp/temp.param/p11.cpp:6:16: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:10:31: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:14:14: error: template parameter missing a default argument"} | ||
Line 6,234: | Line 6,234: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}}, | [k]={{s,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:11:24: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:21:34: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:31:18: error: template parameter redefines default argument"} | ["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:11:24: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:21:34: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:31:18: error: template parameter redefines default argument"} | ||
Line 6,279: | Line 6,279: | ||
[h]=p, | [h]=p, | ||
[e]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template","Support out-of-line definitions of the members of class template"}, | [e]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template","Support out-of-line definitions of the members of class template"}, | ||
[k]={{s,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n if (NeedEmptyTemplateHeader) {\n if (ParamIdx < ParamLists.size()) {\n if (ParamLists[ParamIdx]->size() > 0) {\n // The header has template parameters when it shouldn\'t. Complain.\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}}, | [k]={{s,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n // ...\n if (NeedEmptyTemplateHeader) {\n // ...\n if (ParamIdx < ParamLists.size()) {\n if (ParamLists[ParamIdx]->size() > 0) {\n // The header has template parameters when it shouldn\'t. Complain.\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp:34:1: error: template parameter list matching the non-templated nested type \'A<short>\' should be empty (\'template<>\')"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp:34:1: error: template parameter list matching the non-templated nested type \'A<short>\' should be empty (\'template<>\')"} | ||
Line 6,294: | Line 6,294: | ||
[h]=p, | [h]=p, | ||
[e]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments.","Parameter packs can\'t have default arguments."}, | [e]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments.","Parameter packs can\'t have default arguments."}, | ||
[k]={{s,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (DefaultArg && IsParameterPack) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{s,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (Default && IsParameterPack) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{s,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (IsParameterPack && !Default.isInvalid()) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}}, | [k]={{s,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n // ...\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (DefaultArg && IsParameterPack) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{s,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n // ...\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (Default && IsParameterPack) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{s,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // ...\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (IsParameterPack && !Default.isInvalid()) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:5:28: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:8:24: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:13:45: error: template parameter pack cannot have a default argument"} | ["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:5:28: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:8:24: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:13:45: error: template parameter pack cannot have a default argument"} | ||
Line 6,309: | Line 6,309: | ||
[h]=p, | [h]=p, | ||
[e]={"327865db5323",1244848815,"A parameter pack must always come last in a class template.","A parameter pack must always come last in a class template."}, | [e]={"327865db5323",1244848815,"A parameter pack must always come last in a class template.","A parameter pack must always come last in a class template."}, | ||
[k]={{s,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // C++11 [temp.param]p11:\n // If a template parameter of a primary class template or alias template\n // is a template parameter pack, it shall be the last template parameter.\n if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{s,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n // Ensure that the parameter pack, if present, is the last parameter in the\n // template.\n for (TemplateParameterList::const_iterator ParamIt = Params->begin(), ParamEnd = Params->end(); ParamIt != ParamEnd; ++ParamIt) {\n if (Param->isParameterPack()) {\n Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}}, | [k]={{s,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\n // C++11 [temp.param]p11:\n // If a template parameter of a primary class template or alias template\n // is a template parameter pack, it shall be the last template parameter.\n if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{s,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n // ...\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 // ...\n if (Param->isParameterPack()) {\n // ...\n Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p11-0x.cpp"]={"clang/test/CXX/temp/temp.param/p11-0x.cpp:26:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:30:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:34:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:37:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:41:38: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:44:38: error: template parameter pack must be the last template parameter"} | ["clang/test/CXX/temp/temp.param/p11-0x.cpp"]={"clang/test/CXX/temp/temp.param/p11-0x.cpp:26:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:30:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:34:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:37:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:41:38: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:44:38: error: template parameter pack must be the last template parameter"} | ||
Line 6,324: | Line 6,324: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{cc,1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n if (TemplateParams) {\n for (const auto *TP : TemplateParams->asArray()) {\n for (const auto &Capture : Intro.Captures) {\n if (Capture.Id == TP->getIdentifier()) {\n Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{s,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}}, | [k]={{cc,1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n // ...\n if (TemplateParams) {\n for (const auto *TP : TemplateParams->asArray()) {\n // ...\n for (const auto &Capture : Intro.Captures) {\n if (Capture.Id == TP->getIdentifier()) {\n Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{s,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n // ...\n unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}}, | ||
[o]={ | [o]={ | ||
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:80:11: error: declaration of \'T\' shadows template parameter","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:98:11: error: declaration of \'T\' shadows template parameter"} | [Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:80:11: error: declaration of \'T\' shadows template parameter","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:98:11: error: declaration of \'T\' shadows template parameter"} | ||
Line 6,339: | Line 6,339: | ||
[h]=p, | [h]=p, | ||
[e]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in"}, | [e]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in"}, | ||
[k]={{s,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n case Sema::TPC_FriendFunctionTemplate:\n S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}}, | [k]={{s,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n // ...\n case Sema::TPC_FriendClassTemplate:\n case Sema::TPC_FriendFunctionTemplate:\n // ...\n S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:17:21: error: default template argument not permitted on a friend template"} | ["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:17:21: error: default template argument not permitted on a friend template"} | ||
Line 6,354: | Line 6,354: | ||
[h]=p, | [h]=p, | ||
[e]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in"}, | [e]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in"}, | ||
[k]={{s,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n case Sema::TPC_ClassTemplateMember:\n S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}}, | [k]={{s,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n // ...\n case Sema::TPC_ClassTemplateMember:\n // ...\n S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:32:42: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:41:21: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:42:42: error: cannot add a default template argument to the definition of a member of a class template"} | ["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:32:42: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:41:21: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:42:42: error: cannot add a default template argument to the definition of a member of a class template"} | ||
Line 6,369: | Line 6,369: | ||
[h]=p, | [h]=p, | ||
[e]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"}, | [e]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template"}, | ||
[k]={{s,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // Check that both are parameter packs or neither are parameter packs.\n // However, if we are matching a template template argument to a\n // template template parameter, the template template parameter can have\n // a parameter pack where the template template argument does not.\n if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}}, | [k]={{s,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // Check that both are parameter packs or neither are parameter packs.\n // However, if we are matching a template template argument to a\n // template template parameter, the template template parameter can have\n // a parameter pack where the template template argument does not.\n if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:9:19: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:12:22: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:18:28: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:21:31: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:24:14: error: non-type template parameter conflicts with previous non-type template parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:27:36: error: template template parameter pack conflicts with previous template template parameter"} | ["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:9:19: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:12:22: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:18:28: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:21:31: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:24:14: error: non-type template parameter conflicts with previous non-type template parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:27:36: error: template template parameter pack conflicts with previous template template parameter"} | ||
Line 6,384: | Line 6,384: | ||
[h]=p, | [h]=p, | ||
[e]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but","Complain if we\'re entering the context of a dependent nested-name-specifier but"}, | [e]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but","Complain if we\'re entering the context of a dependent nested-name-specifier but"}, | ||
[k]={{u,6289,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n if (D.getCXXScopeSpec().isInvalid())\n else if (D.getCXXScopeSpec().isSet()) {\n if (!DC || isa<EnumDecl>(DC)) {\n Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{s,1862,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n if (SS.isNotEmpty() && !SS.isInvalid()) {\n if (!SemanticContext) {\n Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}}, | [k]={{u,6289,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n if (D.getCXXScopeSpec().isInvalid())\n // ...\n else if (D.getCXXScopeSpec().isSet()) {\n // ...\n if (!DC || isa<EnumDecl>(DC)) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{s,1862,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n // ...\n if (SS.isNotEmpty() && !SS.isInvalid()) {\n // ...\n if (!SemanticContext) {\n // ...\n Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/pr25181-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr25181-crash-on-invalid.cpp:6:16: error: nested name specifier \'Foo<T>::\' for declaration does not refer into a class, class template or class template partial specialization"} | ["clang/test/SemaCXX/pr25181-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr25181-crash-on-invalid.cpp:6:16: error: nested name specifier \'Foo<T>::\' for declaration does not refer into a class, class template or class template partial specialization"} | ||
Line 6,399: | Line 6,399: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}}, | [k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n // ...\n SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/instantiation-depth-subst.cpp"]={"clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: fatal error: recursive template instantiation exceeded maximum depth of 2"} | ["clang/test/SemaTemplate/instantiation-depth-subst.cpp"]={"clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: fatal error: recursive template instantiation exceeded maximum depth of 2"} | ||
Line 6,414: | Line 6,414: | ||
[h]=p, | [h]=p, | ||
[e]={"816d75b7012a",1269416766,"Support friend function specializations.","Support friend function specializations."}, | [e]={"816d75b7012a",1269416766,"Support friend function specializations.","Support friend function specializations."}, | ||
[k]={{u,9845,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n if (TemplateParams) {\n if (TemplateParams->size() > 0) {\n } else {\n // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n if (isFriend) {\n Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}}, | [k]={{u,9845,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n if (TemplateParams) {\n // ...\n if (TemplateParams->size() > 0) {\n // ...\n } else {\n // ...\n // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n if (isFriend) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:9:26: error: cannot declare an explicit specialization in a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:18:27: error: cannot declare an explicit specialization in a friend"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:9:26: error: cannot declare an explicit specialization in a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:18:27: error: cannot declare an explicit specialization in a friend"} | ||
Line 6,429: | Line 6,429: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // C++ [temp.expl.spec]p2:\n // An explicit specialization may be declared in any scope in which\n // the corresponding primary template may be defined.\n if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n S.Diag(Loc, diag::err_template_spec_decl_function_scope) << Specialized;"}} | [k]={{s,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\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 6,441: | Line 6,441: | ||
[h]=p, | [h]=p, | ||
[e]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a","Diagnose attempts to add default function arguments to a"}, | [e]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a","Diagnose attempts to add default function arguments to a"}, | ||
[k]={{A,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n // C++ [dcl.fct.default]p4:\n // For non-template functions, default arguments can be added in\n // later declarations of a function in the same\n // scope. Declarations in different scopes have completely\n // distinct sets of default arguments. That is, declarations in\n // inner scopes do not acquire default arguments from\n // declarations in outer scopes, and vice versa. In a given\n // function declaration, all parameters subsequent to a\n // parameter with a default argument shall have default\n // arguments supplied in this or previous declarations. A\n // default argument shall not be redefined by a later\n // declaration (not even to the same value).\n //\n // C++ [dcl.fct.default]p6:\n // Except for member functions of class templates, the default arguments\n // in a member function definition that appears outside of the class\n // definition are added to the set of default arguments provided by the\n // member function declaration in the class definition.\n for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n if (OldParamHasDfl && NewParamHasDfl) {\n } else if (OldParamHasDfl) {\n } else if (NewParamHasDfl) {\n if (New->getDescribedFunctionTemplate()) {\n } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}}, | [k]={{A,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n // ...\n // C++ [dcl.fct.default]p4:\n // For non-template functions, default arguments can be added in\n // later declarations of a function in the same\n // scope. Declarations in different scopes have completely\n // distinct sets of default arguments. That is, declarations in\n // inner scopes do not acquire default arguments from\n // declarations in outer scopes, and vice versa. In a given\n // function declaration, all parameters subsequent to a\n // parameter with a default argument shall have default\n // arguments supplied in this or previous declarations. A\n // default argument shall not be redefined by a later\n // declaration (not even to the same value).\n //\n // C++ [dcl.fct.default]p6:\n // Except for member functions of class templates, the default arguments\n // in a member function definition that appears outside of the class\n // definition are added to the set of default arguments provided by the\n // member function declaration in the class definition.\n for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n // ...\n if (OldParamHasDfl && NewParamHasDfl) {\n // ...\n } else if (OldParamHasDfl) {\n // ...\n } else if (NewParamHasDfl) {\n if (New->getDescribedFunctionTemplate()) {\n // ...\n } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n // ...\n Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:10:22: error: default argument not permitted on an explicit specialization of function \'mf1\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:15:27: error: default argument not permitted on an explicit specialization of function \'mf2\'"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:10:22: error: default argument not permitted on an explicit specialization of function \'mf1\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:15:27: error: default argument not permitted on an explicit specialization of function \'mf2\'"} | ||
Line 6,456: | Line 6,456: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // If there were too many template parameter lists, complain about that now.\n if (ParamIdx < ParamLists.size() - 1) {\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}}, | [k]={{s,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n // If there were too many template parameter lists, complain about that now.\n if (ParamIdx < ParamLists.size() - 1) {\n // ...\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/crash-8204126.cpp"]={"clang/test/SemaTemplate/crash-8204126.cpp:4:3: error: extraneous template parameter list in template specialization or out-of-line template definition"} | ["clang/test/SemaTemplate/crash-8204126.cpp"]={"clang/test/SemaTemplate/crash-8204126.cpp:4:3: error: extraneous template parameter list in template specialization or out-of-line template definition"} | ||
Line 6,471: | Line 6,471: | ||
[h]=p, | [h]=p, | ||
[e]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend","Improve the internal representation and semantic analysis of friend"}, | [e]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend","Improve the internal representation and semantic analysis of friend"}, | ||
[k]={{s,8698,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n if (TemplateParams && TemplateParams->size() > 0) {\n } else if (TemplateParams) {\n if (TUK == TUK_Friend)\n Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}}, | [k]={{s,8698,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n // ...\n if (TemplateParams && TemplateParams->size() > 0) {\n // ...\n } else if (TemplateParams) {\n if (TUK == TUK_Friend)\n Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:10:21: error: template specialization declaration cannot be a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:22: error: template specialization declaration cannot be a friend"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:10:21: error: template specialization declaration cannot be a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:22: error: template specialization declaration cannot be a friend"} | ||
Line 6,486: | Line 6,486: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}}, | [k]={{s,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n // ...\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:12:34: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:22:11: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:23:17: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: template specialization requires \'template<>\'"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:12:34: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:22:11: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:23:17: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: template specialization requires \'template<>\'"} | ||
Line 6,501: | Line 6,501: | ||
[h]=p, | [h]=p, | ||
[e]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the","Basic parsing and semantic analysis for out-of-line definitions of the"}, | [e]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the","Basic parsing and semantic analysis for out-of-line definitions of the"}, | ||
[k]={{s,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n if (NeedNonemptyTemplateHeader) {\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}}, | [k]={{s,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n // ...\n if (NeedNonemptyTemplateHeader) {\n // ...\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:283:13: error: template specialization or definition requires a template parameter list corresponding to the nested type \'A<T>\'"} | ["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:283:13: error: template specialization or definition requires a template parameter list corresponding to the nested type \'A<T>\'"} | ||
Line 6,516: | Line 6,516: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // Make sure that this redeclaration (or definition) occurs in the same\n // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n if (isa<TranslationUnitDecl>(SpecializedContext))\n S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}}, | [k]={{s,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n // Make sure that this redeclaration (or definition) occurs in the same\n // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n if (isa<TranslationUnitDecl>(SpecializedContext))\n S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:121:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:122:16: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:126:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:127:16: error: variable template specialization of \'v1\' must occur at global scope"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:121:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:122:16: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:126:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:127:16: error: variable template specialization of \'v1\' must occur at global scope"} | ||
Line 6,531: | Line 6,531: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // Make sure that this redeclaration (or definition) occurs in the same\n // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n if (isa<TranslationUnitDecl>(SpecializedContext))\n else {\n int Diag = diag::err_template_spec_redecl_out_of_scope;"}}, | [k]={{s,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\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 // ...\n else {\n // ...\n int Diag = diag::err_template_spec_redecl_out_of_scope;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:81:25: error: class template specialization of \'X0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:119:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:120:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:124:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:125:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:199:28: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:202:33: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:235:23: error: class template specialization of \'InnerTemplate\' not in class \'X0<int>\' or an enclosing namespace"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:81:25: error: class template specialization of \'X0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:119:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:120:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:124:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:125:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:199:28: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:202:33: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:235:23: error: class template specialization of \'InnerTemplate\' not in class \'X0<int>\' or an enclosing namespace"} | ||
Line 6,546: | Line 6,546: | ||
[h]=v, | [h]=v, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{jb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n if (Tok.is(tok::identifier)) {\n } else if (Tok.is(tok::annot_template_id)) {\n if (TemplateId && !TemplateId->mightBeType()) {\n Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}}, | [k]={{jb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n if (Tok.is(tok::identifier)) {\n // ...\n } else if (Tok.is(tok::annot_template_id)) {\n // ...\n if (TemplateId && !TemplateId->mightBeType()) {\n // ...\n Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:13:14: error: identifier followed by \'<\' indicates a class template specialization but \'Ident\' refers to a function template"} | ["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:13:14: error: identifier followed by \'<\' indicates a class template specialization but \'Ident\' refers to a function template"} | ||
Line 6,561: | Line 6,561: | ||
[h]=p, | [h]=p, | ||
[e]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization"}, | [e]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization"}, | ||
[k]={{s,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n if (isa<ClassTemplateDecl>(Specialized))\n else if (isa<VarTemplateDecl>(Specialized))\n else if (isa<FunctionTemplateDecl>(Specialized))\n else if (isa<CXXMethodDecl>(Specialized))\n else if (isa<VarDecl>(Specialized))\n else if (isa<RecordDecl>(Specialized))\n else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n else {\n S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}} | [k]={{s,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n if (isa<ClassTemplateDecl>(Specialized))\n // ...\n else if (isa<VarTemplateDecl>(Specialized))\n // ...\n else if (isa<FunctionTemplateDecl>(Specialized))\n // ...\n else if (isa<CXXMethodDecl>(Specialized))\n // ...\n else if (isa<VarDecl>(Specialized))\n // ...\n else if (isa<RecordDecl>(Specialized))\n // ...\n else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n // ...\n else {\n S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}} | ||
}, | }, | ||
["err_template_tag_noparams"]={ | ["err_template_tag_noparams"]={ | ||
Line 6,573: | Line 6,573: | ||
[h]=p, | [h]=p, | ||
[e]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class","Improve checking for specializations of member classes of class"}, | [e]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class","Improve checking for specializations of member classes of class"}, | ||
[k]={{u,16817,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // We only need to do this matching if we have template parameters\n // or a scope specifier, which also conveniently avoids this work\n // for non-C++ cases.\n if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n if (TemplateParams->size() > 0) {\n } else {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{A,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n if (TemplateParams->size() > 0) {\n } else {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}}, | [k]={{u,16817,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n // ...\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 // ...\n if (TemplateParams->size() > 0) {\n // ...\n } else {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{A,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n // ...\n if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n if (TemplateParams->size() > 0) {\n // ...\n } else {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"} | ["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"} | ||
Line 6,588: | Line 6,588: | ||
[h]=p, | [h]=p, | ||
[e]={Qb,1576172311,cb,cb}, | [e]={Qb,1576172311,cb,cb}, | ||
[k]={{s,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n // C++1z [temp.arg.template]p3: (DR 150)\n // A template-argument matches a template template-parameter P when P\n // is at least as specialized as the template-argument A.\n // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n // defect report resolution from C++17 and shouldn\'t be introduced by\n // concepts.\n if (getLangOpts().RelaxedTemplateTemplateArgs) {\n if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n if (!IsParamAtLeastAsConstrained) {\n Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}}, | [k]={{s,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n // ...\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 // ...\n if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n // ...\n if (!IsParamAtLeastAsConstrained) {\n Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:14:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:19:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:44:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:49:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'"} | ["clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:14:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:19:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:44:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:49:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'"} | ||
Line 6,603: | Line 6,603: | ||
[h]=p, | [h]=p, | ||
[e]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that","Diagnose the declaration of template template parameters that"}, | [e]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that","Diagnose the declaration of template template parameters that"}, | ||
[k]={{s,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n if (Params->size() == 0) {\n Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}}, | [k]={{s,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // ...\n if (Params->size() == 0) {\n Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p1.cpp"]={"clang/test/CXX/temp/temp.param/p1.cpp:4:27: error: template template parameter must have its own template parameters"} | ["clang/test/CXX/temp/temp.param/p1.cpp"]={"clang/test/CXX/temp/temp.param/p1.cpp:4:27: error: template template parameter must have its own template parameters"} | ||
Line 6,618: | Line 6,618: | ||
[h]=p, | [h]=p, | ||
[e]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to","Start propagating template parameter lists to the right places to"}, | [e]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to","Start propagating template parameter lists to the right places to"}, | ||
[k]={{u,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n if (TemplateParamLists.size()) {\n Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}}, | [k]={{u,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n if (TemplateParamLists.size()) {\n Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/template-decl-fail.cpp"]={"clang/test/SemaTemplate/template-decl-fail.cpp:3:32: error: a typedef cannot be a template"} | ["clang/test/SemaTemplate/template-decl-fail.cpp"]={"clang/test/SemaTemplate/template-decl-fail.cpp:3:32: error: a typedef cannot be a template"} | ||
Line 6,633: | Line 6,633: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{s,1842,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n // There is no such thing as an unnamed class template.\n if (!Name) {\n Diag(KWLoc, diag::err_template_unnamed_class);"}} | [k]={{s,1842,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n // ...\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 6,645: | Line 6,645: | ||
[h]=p, | [h]=p, | ||
[e]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static","Implement parsing and semantic analysis for out-of-line definitions of static"}, | [e]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static","Implement parsing and semantic analysis for out-of-line definitions of static"}, | ||
[k]={{u,7631,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (TemplateParams) {\n if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}, | [k]={{u,7631,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (TemplateParams) {\n if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:32:3: error: extraneous \'template<>\' in declaration of variable \'foo\'"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:32:3: error: extraneous \'template<>\' in declaration of variable \'foo\'"} | ||
Line 6,660: | Line 6,660: | ||
[h]=v, | [h]=v, | ||
[e]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently...","A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently accepting and producing possibly-unexpected behavior."}, | [e]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently...","A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently accepting and producing possibly-unexpected behavior."}, | ||
[k]={{bc,197,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n if (Tok.is(tok::kw_static_assert)) {\n Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}}, | [k]={{bc,197,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n // ...\n if (Tok.is(tok::kw_static_assert)) {\n // ...\n Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:5:3: error: a static_assert declaration cannot be a template","clang/test/Parser/cxx11-templates.cpp:9:1: error: a static_assert declaration cannot be a template"} | ["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:5:3: error: a static_assert declaration cannot be a template","clang/test/Parser/cxx11-templates.cpp:9:1: error: a static_assert declaration cannot be a template"} | ||
Line 6,675: | Line 6,675: | ||
[h]=v, | [h]=v, | ||
[e]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select."}, | [e]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select."}, | ||
[k]={{jb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n // \'using namespace\' means this is a using-directive.\n if (Tok.is(tok::kw_namespace)) {\n // Template parameters are always an error here.\n if (TemplateInfo.Kind) {\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{jb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n if (TemplateInfo.Kind) {\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{jb,806,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // Diagnose an attempt to declare a templated using-declaration.\n // In C++11, alias-declarations can be templates:\n // template <...> using id = type;\n if (TemplateInfo.Kind) {\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}}, | [k]={{jb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n // ...\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 // ...\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{jb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\n if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n // ...\n if (TemplateInfo.Kind) {\n // ...\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{jb,806,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\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 // ...\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"} | ["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"} | ||
Line 6,690: | Line 6,690: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{yb,1314,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}}, | [k]={{yb,1314,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n // ...\n for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n // ...\n } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Misc/verify.c"]={"clang/test/Misc/verify.c:6:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:7:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:10:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:11:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:12:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:13:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:14:10: error: tentative definition has type \'struct s\' that is never completed"} | ["clang/test/Misc/verify.c"]={"clang/test/Misc/verify.c:6:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:7:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:10:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:11:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:12:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:13:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:14:10: error: tentative definition has type \'struct s\' that is never completed"} | ||
Line 6,705: | Line 6,705: | ||
[h]=a, | [h]=a, | ||
[e]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."}, | [e]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."}, | ||
[k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}} | [k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n // ...\n for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n // ...\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 6,717: | Line 6,717: | ||
[h]=a, | [h]=a, | ||
[e]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."}, | [e]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."}, | ||
[k]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}}, | [k]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n // ...\n if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Modules/extensions.c"]={"clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testA\' has different version (2.5) than expected (1.3)","clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testB\' has different version (7.3) than expected (3.2)"} | ["clang/test/Modules/extensions.c"]={"clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testA\' has different version (2.5) than expected (1.3)","clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testB\' has different version (7.3) than expected (3.2)"} | ||
Line 6,732: | Line 6,732: | ||
[h]="Lambda Issue", | [h]="Lambda Issue", | ||
[e]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which","Introduce the lambda scope before determining explicit captures, which"}, | [e]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which","Introduce the lambda scope before determining explicit captures, which"}, | ||
[k]={{J,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n // This context can\'t implicitly capture \'this\'; fail out.\n if (BuildAndDiagnose) {\n Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{J,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n // This context can\'t implicitly capture \'this\'; fail out.\n if (BuildAndDiagnose)\n Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{cc,1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n if (ThisCaptureType.isNull()) {\n Diag(C->Loc, diag::err_this_capture) << true;"}}, | [k]={{J,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n // ...\n for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n // ...\n if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n // This context can\'t implicitly capture \'this\'; fail out.\n if (BuildAndDiagnose) {\n Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{J,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n // ...\n for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n // ...\n // This context can\'t implicitly capture \'this\'; fail out.\n if (BuildAndDiagnose)\n Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{cc,1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n // ...\n if (ThisCaptureType.isNull()) {\n Diag(C->Loc, diag::err_this_capture) << true;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:20:7: error: \'this\' cannot be captured in this context"} | ["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:20:7: error: \'this\' cannot be captured in this context"} | ||
Line 6,747: | Line 6,747: | ||
[h]=v, | [h]=v, | ||
[e]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from","Parsing of C++0x lambda expressions, from John Freeman with help from"}, | [e]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from","Parsing of C++0x lambda expressions, from John Freeman with help from"}, | ||
[k]={{nb,969,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n/// contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n/// lambda-introducer and some other construct. In this mode, we do not\n/// produce any diagnostics or take any other irreversible action unless\n/// we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n/// the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n while (Tok.isNot(tok::r_square)) {\n if (Tok.is(tok::star)) {\n } else if (Tok.is(tok::kw_this)) {\n } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n } else {\n if (Tok.is(tok::identifier)) {\n } else if (Tok.is(tok::kw_this)) {\n return Invalid([&] {\n Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}}, | [k]={{nb,969,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n/// contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n/// lambda-introducer and some other construct. In this mode, we do not\n/// produce any diagnostics or take any other irreversible action unless\n/// we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n/// the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n // ...\n while (Tok.isNot(tok::r_square)) {\n // ...\n if (Tok.is(tok::star)) {\n // ...\n } else if (Tok.is(tok::kw_this)) {\n // ...\n } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::identifier)) {\n // ...\n } else if (Tok.is(tok::kw_this)) {\n return Invalid([&] {\n // ...\n Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:17:11: error: \'this\' cannot be captured by reference","clang/test/Parser/cxx0x-lambda-expressions.cpp:18:7: error: \'this\' cannot be captured by reference"} | ["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:17:11: error: \'this\' cannot be captured by reference","clang/test/Parser/cxx0x-lambda-expressions.cpp:18:7: error: \'this\' cannot be captured by reference"} | ||
Line 6,762: | Line 6,762: | ||
[h]=p, | [h]=p, | ||
[e]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'","Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"}, | [e]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'","Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"}, | ||
[k]={{A,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n bool VisitCXXThisExpr(CXXThisExpr *E) {\n S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}}, | [k]={{A,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n // ...\n bool VisitCXXThisExpr(CXXThisExpr *E) {\n S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:112:33: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:113:33: error: \'this\' cannot be used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:117:38: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:120:28: error: \'this\' cannot be implicitly used in a static member function declaration"} | ["clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:112:33: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:113:33: error: \'this\' cannot be used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:117:38: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:120:28: error: \'this\' cannot be implicitly used in a static member function declaration"} | ||
Line 6,777: | Line 6,777: | ||
[h]=p, | [h]=p, | ||
[e]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"}, | [e]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"}, | ||
[k]={{u,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n if (!checkConstInit()) {\n Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}}, | [k]={{u,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n // ...\n } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n if (!checkConstInit()) {\n // ...\n Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:12:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:19:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:26:28: error: initializer for thread-local variable must be a constant expression"} | ["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:12:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:19:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:26:28: error: initializer for thread-local variable must be a constant expression"} | ||
Line 6,792: | Line 6,792: | ||
[h]=p, | [h]=p, | ||
[e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers."}, | [e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers."}, | ||
[k]={{u,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n // C++11 [dcl.stc]p4:\n // When thread_local is applied to a variable of block scope the\n // storage-class-specifier static is implied if it does not appear\n // explicitly.\n // Core issue: \'static\' is not implied if the variable is declared\n // \'extern\'.\n if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{V,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (VD->hasLocalStorage()) {\n S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}}, | [k]={{u,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n // C++11 [dcl.stc]p4:\n // When thread_local is applied to a variable of block scope the\n // storage-class-specifier static is implied if it does not appear\n // explicitly.\n // Core issue: \'static\' is not implied if the variable is declared\n // \'extern\'.\n if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{V,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (VD->hasLocalStorage()) {\n S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:46:3: error: \'_Thread_local\' variables must have global storage","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:54:3: error: \'__thread\' variables must have global storage"} | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:46:3: error: \'_Thread_local\' variables must have global storage","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:54:3: error: \'__thread\' variables must have global storage"} | ||
Line 6,807: | Line 6,807: | ||
[h]=p, | [h]=p, | ||
[e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers."}, | [e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers."}, | ||
[k]={{u,4707,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n if (New->getTLSKind() != Old->getTLSKind()) {\n if (!Old->getTLSKind()) {\n Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}}, | [k]={{u,4707,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n // ...\n if (New->getTLSKind() != Old->getTLSKind()) {\n if (!Old->getTLSKind()) {\n Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:11:21: error: thread-local declaration of \'b\' follows non-thread-local declaration"} | ["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:11:21: error: thread-local declaration of \'b\' follows non-thread-local declaration"} | ||
Line 6,822: | Line 6,822: | ||
[h]=p, | [h]=p, | ||
[e]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"}, | [e]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer"}, | ||
[k]={{u,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}}, | [k]={{u,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n // ...\n Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:109:12: error: type of thread-local variable has non-trivial destruction"} | ["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:109:12: error: type of thread-local variable has non-trivial destruction"} | ||
Line 6,837: | Line 6,837: | ||
[h]=p, | [h]=p, | ||
[e]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.","Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."}, | [e]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.","Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."}, | ||
[k]={{u,4717,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n if (New->getTLSKind() != Old->getTLSKind()) {\n if (!Old->getTLSKind()) {\n } else if (!New->getTLSKind()) {\n } else {\n Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}}, | [k]={{u,4717,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'. Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n // ...\n if (New->getTLSKind() != Old->getTLSKind()) {\n if (!Old->getTLSKind()) {\n // ...\n } else if (!New->getTLSKind()) {\n // ...\n } else {\n // ...\n Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:74:19: error: thread-local declaration of \'t17\' with static initialization follows declaration with dynamic initialization","clang/test/Sema/thread-specifier.c:78:18: error: thread-local declaration of \'t18\' with dynamic initialization follows declaration with static initialization"} | ["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:74:19: error: thread-local declaration of \'t17\' with static initialization follows declaration with dynamic initialization","clang/test/Sema/thread-specifier.c:78:18: error: thread-local declaration of \'t18\' with dynamic initialization follows declaration with static initialization"} | ||
Line 6,852: | Line 6,852: | ||
[h]=p, | [h]=p, | ||
[e]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it.","Print an error for uses of __thread on targets which don\'t support it."}, | [e]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it.","Print an error for uses of __thread on targets which don\'t support it."}, | ||
[k]={{u,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n // C++11 [dcl.stc]p4:\n // When thread_local is applied to a variable of block scope the\n // storage-class-specifier static is implied if it does not appear\n // explicitly.\n // Core issue: \'static\' is not implied if the variable is declared\n // \'extern\'.\n if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n else if (!Context.getTargetInfo().isTLSSupported()) {\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n } else\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{V,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!S.Context.getTargetInfo().isTLSSupported()) {\n S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{r,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n if (!Context.getTargetInfo().isTLSSupported())\n if (const auto *VD = dyn_cast<VarDecl>(D))\n if (VD->getTLSKind() != VarDecl::TLS_None)\n targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}}, | [k]={{u,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\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 // ...\n else if (!Context.getTargetInfo().isTLSSupported()) {\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n // ...\n } else\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{u,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n // ...\n if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{V,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!S.Context.getTargetInfo().isTLSSupported()) {\n S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{r,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n if (!Context.getTargetInfo().isTLSSupported())\n if (const auto *VD = dyn_cast<VarDecl>(D))\n if (VD->getTLSKind() != VarDecl::TLS_None)\n targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:29:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:31:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:33:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:35:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:18:26: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:20:20: error: thread-local storage is not supported for the current target"} | ["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:29:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:31:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:33:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:35:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:18:26: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:20:20: error: thread-local storage is not supported for the current target"} | ||
Line 6,882: | Line 6,882: | ||
[h]=p, | [h]=p, | ||
[e]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type.","Diagnose attempts to throw an abstract class type."}, | [e]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type.","Diagnose attempts to throw an abstract class type."}, | ||
[k]={{J,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}}, | [k]={{J,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n // ...\n if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}}, | ||
[o]={ | [o]={ | ||
[Sb]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"} | [Sb]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"} | ||
Line 6,897: | Line 6,897: | ||
[h]=p, | [h]=p, | ||
[e]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | [e]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | ||
[k]={{J,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}}, | [k]={{J,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}}, | ||
[o]={ | [o]={ | ||
[Sb]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"} | [Sb]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"} | ||
Line 6,912: | Line 6,912: | ||
[h]=p, | [h]=p, | ||
[e]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | [e]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes."}, | ||
[k]={{J,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}}, | [k]={{J,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}}, | ||
[o]={ | [o]={ | ||
[Sb]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"} | [Sb]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"} | ||
Line 6,927: | Line 6,927: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{J,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n if (!isPointer || !Ty->isVoidType()) {\n if (!isPointer && Ty->isSizelessType()) {\n Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}}, | [k]={{J,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n // ...\n if (!isPointer && Ty->isSizelessType()) {\n Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:361:3: error: cannot throw object of sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"} | ["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:361:3: error: cannot throw object of sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"} | ||
Line 6,942: | Line 6,942: | ||
[h]=p, | [h]=p, | ||
[e]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it","Add a \"maximum TLS alignment\" characteristic to the target info, so it"}, | [e]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it","Add a \"maximum TLS alignment\" characteristic to the target info, so it"}, | ||
[k]={{u,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n // Perform TLS alignment check here after attributes attached to the variable\n // which may affect the alignment have been processed. Only perform the check\n // if the target has a maximum TLS alignment (zero means no constraints).\n if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n // Protect the check so that it\'s not performed on dependent types and\n // dependent alignments (we can\'t determine the alignment in that case).\n if (!VD->hasDependentAlignment()) {\n if (Context.getDeclAlign(VD) > MaxAlignChars) {\n Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{V,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n if (VD) {\n if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}}, | [k]={{u,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n // ...\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 // ...\n if (Context.getDeclAlign(VD) > MaxAlignChars) {\n Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{V,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n // ...\n if (VD) {\n // ...\n if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/tls_alignment.cpp"]={"clang/test/Sema/tls_alignment.cpp:37:44: error: alignment (64) of thread-local variable \'bar\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:40:44: error: alignment (64) of thread-local variable \'bar2\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:43:44: error: alignment (64) of thread-local variable \'bar3\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:46:44: error: alignment (64) of thread-local variable \'bar4\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:49:44: error: alignment (64) of thread-local variable \'bar5\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:65:30: error: alignment (64) of thread-local variable \'blah\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:76:51: error: alignment (64) of thread-local variable \'x\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:75:50: error: alignment (64) of thread-local variable \'b<64>\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:72:20: error: alignment (64) of thread-local variable \'b\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:73:20: error: alignment (64) of thread-local variable \'c\' is greater than the maximum supported alignment (32) for a thread-local variable on this target"} | ["clang/test/Sema/tls_alignment.cpp"]={"clang/test/Sema/tls_alignment.cpp:37:44: error: alignment (64) of thread-local variable \'bar\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:40:44: error: alignment (64) of thread-local variable \'bar2\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:43:44: error: alignment (64) of thread-local variable \'bar3\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:46:44: error: alignment (64) of thread-local variable \'bar4\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:49:44: error: alignment (64) of thread-local variable \'bar5\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:65:30: error: alignment (64) of thread-local variable \'blah\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:76:51: error: alignment (64) of thread-local variable \'x\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:75:50: error: alignment (64) of thread-local variable \'b<64>\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:72:20: error: alignment (64) of thread-local variable \'b\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:73:20: error: alignment (64) of thread-local variable \'c\' is greater than the maximum supported alignment (32) for a thread-local variable on this target"} | ||
Line 6,957: | Line 6,957: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{Fb,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n if (NumActuals < MinArgsExpected) {\n // There are several cases where too few arguments is ok, handle them now.\n if (NumActuals == 0 && MinArgsExpected == 1) {\n } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected || // A(x, ...) -> A(X)\n } else if (!ContainsCodeCompletionTok) {\n Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{Fb,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n already_lexed:\n case tok::r_paren:\n // The last \')\' has been reached; return the value if one found or\n // a diagnostic and a dummy value.\n if (Result) {\n } else {\n if (!SuppressDiagnostic)\n PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}}, | [k]={{Fb,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\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 // ...\n } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected || // A(x, ...) -> A(X)\n // ...\n } else if (!ContainsCodeCompletionTok) {\n // ...\n Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{Fb,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n // ...\n already_lexed:\n // ...\n case tok::r_paren:\n // ...\n // The last \')\' has been reached; return the value if one found or\n // a diagnostic and a dummy value.\n if (Result) {\n // ...\n } else {\n // ...\n if (!SuppressDiagnostic)\n PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:20:5: error: too few arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:21:6: error: too few arguments provided to function-like macro invocation"} | ["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:20:5: error: too few arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:21:6: error: too few arguments provided to function-like macro invocation"} | ||
Line 6,972: | Line 6,972: | ||
[h]=a, | [h]=a, | ||
[e]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals","[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"}, | [e]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals","[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"}, | ||
[k]={{r,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n else if (Val.ugt(MaxVal) || Overflowed)\n Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}}, | [k]={{r,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n // ...\n else if (Val.ugt(MaxVal) || Overflowed)\n Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:83:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:84:39: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:85:25: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:86:27: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:87:35: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:88:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:91:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:92:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:93:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:94:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:95:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:96:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:99:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:100:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:101:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:102:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:103:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:104:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:107:12: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:111:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:112:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:113:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:114:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:115:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:116:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:118:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:119:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:120:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:121:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:122:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:123:47: error: this value is too large for this fixed point type"} | ["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:83:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:84:39: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:85:25: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:86:27: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:87:35: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:88:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:91:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:92:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:93:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:94:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:95:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:96:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:99:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:100:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:101:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:102:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:103:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:104:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:107:12: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:111:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:112:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:113:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:114:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:115:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:116:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:118:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:119:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:120:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:121:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:122:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:123:47: error: this value is too large for this fixed point type"} | ||
Line 6,987: | Line 6,987: | ||
[h]=z, | [h]=z, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{Fb,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // If this is not a variadic macro, and too many args were specified, emit\n // an error.\n if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{Fb,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n if (NumActuals < MinArgsExpected) {\n } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{Fb,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n already_lexed:\n case tok::comma:\n if (!SuppressDiagnostic) {\n PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}}, | [k]={{Fb,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\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 // ...\n Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{Fb,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\n if (NumActuals < MinArgsExpected) {\n // ...\n } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n // ...\n Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{Fb,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n // ...\n already_lexed:\n // ...\n case tok::comma:\n if (!SuppressDiagnostic) {\n PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:11:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:12:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:16:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:18:8: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:24:9: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:27:5: error: too many arguments provided to function-like macro invocation"} | ["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:11:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:12:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:16:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:18:8: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:24:9: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:27:5: error: too many arguments provided to function-like macro invocation"} | ||
Line 7,002: | Line 7,002: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{T,2296,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n if (First) {\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n if (!DS->isSingleDecl())\n return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}}, | [k]={{T,2296,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n // ...\n if (First) {\n // ...\n if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n if (!DS->isSingleDecl())\n return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:28:17: error: only one element declaration is allowed"} | ["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:28:17: error: only one element declaration is allowed"} | ||
Line 7,017: | Line 7,017: | ||
[h]=p, | [h]=p, | ||
[e]={"349636d2bfc3",1575555459,Ob,Ob}, | [e]={"349636d2bfc3",1575555459,Ob,Ob}, | ||
[k]={{u,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n if (TrailingRequiresClause)\n SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}}, | [k]={{u,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n // ...\n if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n // ...\n } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n // ...\n } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n // ...\n } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n if (TrailingRequiresClause)\n SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:68:23: error: deduction guide cannot have a requires clause"} | ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:68:23: error: deduction guide cannot have a requires clause"} | ||
Line 7,032: | Line 7,032: | ||
[h]=p, | [h]=p, | ||
[e]={"59006e4338ce",1298335013,"Fix a few auto-related issues:","Fix a few auto-related issues:"}, | [e]={"59006e4338ce",1298335013,"Fix a few auto-related issues:","Fix a few auto-related issues:"}, | ||
[k]={{K,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n case DeclaratorChunk::Function: {\n // Check for auto functions and trailing return type and adjust the\n // return type accordingly.\n if (!D.isInvalidType()) {\n // trailing-return-type is only required if we\'re declaring a function,\n // and not, for instance, a pointer to a function.\n if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n } else if (FTI.hasTrailingReturnType()) {\n // T must be exactly \'auto\' at this point. See CWG issue 681.\n if (isa<ParenType>(T)) {\n S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}}, | [k]={{K,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // Check for auto functions and trailing return type and adjust the\n // return type accordingly.\n if (!D.isInvalidType()) {\n // trailing-return-type is only required if we\'re declaring a function,\n // and not, for instance, a pointer to a function.\n if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n // ...\n } else if (FTI.hasTrailingReturnType()) {\n // T must be exactly \'auto\' at this point. See CWG issue 681.\n if (isa<ParenType>(T)) {\n S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp:6:1: error: trailing return type may not be nested within parentheses"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp:6:1: error: trailing return type may not be nested within parentheses"} | ||
Line 7,047: | Line 7,047: | ||
[h]=p, | [h]=p, | ||
[e]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,","Implement the C++0x \"trailing return type\" feature, e.g.,"}, | [e]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,","Implement the C++0x \"trailing return type\" feature, e.g.,"}, | ||
[k]={{K,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n case DeclaratorChunk::Function: {\n // Check for auto functions and trailing return type and adjust the\n // return type accordingly.\n if (!D.isInvalidType()) {\n // trailing-return-type is only required if we\'re declaring a function,\n // and not, for instance, a pointer to a function.\n if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n } else if (FTI.hasTrailingReturnType()) {\n // T must be exactly \'auto\' at this point. See CWG issue 681.\n if (isa<ParenType>(T)) {\n } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}}, | [k]={{K,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // Check for auto functions and trailing return type and adjust the\n // return type accordingly.\n if (!D.isInvalidType()) {\n // trailing-return-type is only required if we\'re declaring a function,\n // and not, for instance, a pointer to a function.\n if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n // ...\n } else if (FTI.hasTrailingReturnType()) {\n // T must be exactly \'auto\' at this point. See CWG issue 681.\n if (isa<ParenType>(T)) {\n // ...\n } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n // ...\n } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:41:7: error: function with trailing return type must specify return type \'auto\', not \'Large auto\'"} | ["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:41:7: error: function with trailing return type must specify return type \'auto\', not \'Large auto\'"} | ||
Line 7,062: | Line 7,062: | ||
[h]=v, | [h]=v, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{bc,1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n // Diagnose this situation as appropriate.\n if (!ObjCGenericList) {\n unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}}, | [k]={{bc,1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n // ...\n // Diagnose this situation as appropriate.\n if (!ObjCGenericList) {\n // ...\n unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:6:8: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:8:12: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:9:5: error: a space is required between consecutive right angle brackets (use \'> >\')"} | ["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:6:8: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:8:12: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:9:5: error: a space is required between consecutive right angle brackets (use \'> >\')"} | ||
Line 7,077: | Line 7,077: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{K,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}}, | [k]={{K,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n // ...\n S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:38:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:39:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:41:16: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:42:7: error: \'__arm_streaming\' only applies to function types; type here is \'int *\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:43:7: error: \'__arm_streaming\' only applies to function types; type here is \'int &\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:44:8: error: \'__arm_streaming\' only applies to function types; type here is \'int &&\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:45:20: error: \'__arm_streaming\' only applies to function types; type here is \'int[1]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:43: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:59: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:91:1: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:95:3: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:107:14: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:37: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:53: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:17: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:80: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:96: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:34: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:140:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:141:30: error: \'__arm_streaming\' only applies to function types; type here is \'T\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:162:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:166:30: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:167:41: error: \'__arm_streaming\' only applies to function types; type here is \'struct struct_attr\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:212:15: error: \'__arm_streaming\' only applies to function types; type here is \'void\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:52: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:240:26: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:248:32: error: \'__arm_streaming\' only applies to function types; type here is \'int[5]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:253:7: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:254:13: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:12: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:39: error: \'__arm_streaming\' only applies to function types; type here is \'char\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:266:10: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:273:8: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:283:37: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:285:39: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned long\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:292:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:294:6: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:313:10: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:318:15: error: \'__arm_streaming\' only applies to function types; type here is \'int\'"} | ["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:38:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:39:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:41:16: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:42:7: error: \'__arm_streaming\' only applies to function types; type here is \'int *\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:43:7: error: \'__arm_streaming\' only applies to function types; type here is \'int &\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:44:8: error: \'__arm_streaming\' only applies to function types; type here is \'int &&\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:45:20: error: \'__arm_streaming\' only applies to function types; type here is \'int[1]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:43: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:59: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:91:1: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:95:3: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:107:14: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:37: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:53: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:17: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:80: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:96: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:34: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:140:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:141:30: error: \'__arm_streaming\' only applies to function types; type here is \'T\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:162:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:166:30: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:167:41: error: \'__arm_streaming\' only applies to function types; type here is \'struct struct_attr\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:212:15: error: \'__arm_streaming\' only applies to function types; type here is \'void\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:52: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:240:26: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:248:32: error: \'__arm_streaming\' only applies to function types; type here is \'int[5]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:253:7: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:254:13: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:12: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:39: error: \'__arm_streaming\' only applies to function types; type here is \'char\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:266:10: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:273:8: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:283:37: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:285:39: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned long\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:292:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:294:6: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:313:10: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:318:15: error: \'__arm_streaming\' only applies to function types; type here is \'int\'"} | ||
Line 7,092: | Line 7,092: | ||
[h]=a, | [h]=a, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{r,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}}, | [k]={{r,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c"]={ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb} | ["clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c"]={ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb,ob,qb} | ||
Line 7,107: | Line 7,107: | ||
[h]=p, | [h]=p, | ||
[e]={Qb,1576172311,cb,cb}, | [e]={Qb,1576172311,cb,cb}, | ||
[k]={{s,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}}, | [k]={{s,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n // ...\n if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:65:15: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:66:10: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:67:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:68:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here"} | ["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:65:15: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:66:10: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:67:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:68:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here"} | ||
Line 7,122: | Line 7,122: | ||
[h]=p, | [h]=p, | ||
[e]={Qb,1576172311,cb,cb}, | [e]={Qb,1576172311,cb,cb}, | ||
[k]={{s,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n // C++2a [temp.param]p4:\n // [...] The concept designated by a type-constraint shall be a type\n // concept ([temp.concept]).\n if (!CD->isTypeConcept()) {\n Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}}, | [k]={{s,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n // ...\n // C++2a [temp.param]p4:\n // [...] The concept designated by a type-constraint shall be a type\n // concept ([temp.concept]).\n if (!CD->isTypeConcept()) {\n Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:55:15: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:56:10: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:57:3: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:58:3: error: concept named in type constraint is not a type concept"} | ["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:55:15: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:56:10: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:57:3: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:58:3: error: concept named in type constraint is not a type concept"} | ||
Line 7,137: | Line 7,137: | ||
[h]=p, | [h]=p, | ||
[e]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates."}, | [e]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates."}, | ||
[k]={{K,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n case DeclaratorContext::AliasTemplate:\n DiagID = diag::err_type_defined_in_alias_template;"}}, | [k]={{K,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::AliasTemplate:\n DiagID = diag::err_type_defined_in_alias_template;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32: error: \'(unnamed struct at clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32)\' cannot be defined in a type alias template"} | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32: error: \'(unnamed struct at clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32)\' cannot be defined in a type alias template"} | ||
Line 7,152: | Line 7,152: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{K,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n case DeclaratorContext::Condition:\n DiagID = diag::err_type_defined_in_condition;"}}, | [k]={{K,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::Condition:\n // ...\n DiagID = diag::err_type_defined_in_condition;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:20:17: error: \'S\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:21:10: error: \'(unnamed struct at clang/test/SemaCXX/condition.cpp:21:10)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:22:11: error: \'(unnamed enum at clang/test/SemaCXX/condition.cpp:22:11)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:64:14: error: \'S\' cannot be defined in a condition"} | ["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:20:17: error: \'S\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:21:10: error: \'(unnamed struct at clang/test/SemaCXX/condition.cpp:21:10)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:22:11: error: \'(unnamed enum at clang/test/SemaCXX/condition.cpp:22:11)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:64:14: error: \'S\' cannot be defined in a condition"} | ||
Line 7,167: | Line 7,167: | ||
[h]=p, | [h]=p, | ||
[e]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration.","[Sema] Error out early for tags defined inside an enumeration."}, | [e]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration.","[Sema] Error out early for tags defined inside an enumeration."}, | ||
[k]={{u,17563,"CreateNewDecl:\n if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}}, | [k]={{u,17563,"CreateNewDecl:\n // ...\n if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:123:18: error: \'PR28903::(unnamed enum at clang/test/SemaCXX/enum.cpp:123:18)\' cannot be defined in an enumeration"} | ["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:123:18: error: \'PR28903::(unnamed enum at clang/test/SemaCXX/enum.cpp:123:18)\' cannot be defined in an enumeration"} | ||
Line 7,182: | Line 7,182: | ||
[h]=p, | [h]=p, | ||
[e]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).","Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."}, | [e]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).","Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."}, | ||
[k]={{T,2504,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n/// A range-based for statement is equivalent to\n///\n/// {\n/// auto && __range = range-init;\n/// for ( auto __begin = begin-expr,\n/// __end = end-expr;\n/// __begin != __end;\n/// ++__begin ) {\n/// for-range-declaration = *__begin;\n/// statement\n/// }\n/// }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n if (!DS->isSingleDecl()) {\n Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}}, | [k]={{T,2504,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n/// A range-based for statement is equivalent to\n///\n/// {\n/// auto && __range = range-init;\n/// for ( auto __begin = begin-expr,\n/// __end = end-expr;\n/// __begin != __end;\n/// ++__begin ) {\n/// for-range-declaration = *__begin;\n/// statement\n/// }\n/// }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n // ...\n if (!DS->isSingleDecl()) {\n Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:18:8: error: types may not be defined in a for range declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:21:8: error: types may not be defined in a for range declaration"} | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:18:8: error: types may not be defined in a for range declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:21:8: error: types may not be defined in a for range declaration"} | ||
Line 7,197: | Line 7,197: | ||
[h]=p, | [h]=p, | ||
[e]={"d6ab8744dc68",1243553519,Pb,Pb}, | [e]={"d6ab8744dc68",1243553519,Pb,Pb}, | ||
[k]={{u,17629,"CreateNewDecl:\n // If we\'re declaring or defining a tag in function prototype scope in C,\n // note that this type can only be used within the function and add it to\n // the list of decls to inject into the function definition scope.\n if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n if (getLangOpts().CPlusPlus) {\n // C++ [dcl.fct]p6:\n // Types shall not be defined in return or parameter types.\n if (TUK == TUK_Definition && !IsTypeSpecifier) {\n Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{K,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n case DeclaratorContext::RequiresExpr:\n DiagID = diag::err_type_defined_in_param_type;"}}, | [k]={{u,17629,"CreateNewDecl:\n // ...\n // If we\'re declaring or defining a tag in function prototype scope in C,\n // note that this type can only be used within the function and add it to\n // the list of decls to inject into the function definition scope.\n if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n if (getLangOpts().CPlusPlus) {\n // C++ [dcl.fct]p6:\n // Types shall not be defined in return or parameter types.\n if (TUK == TUK_Definition && !IsTypeSpecifier) {\n Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{K,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::Prototype:\n case DeclaratorContext::LambdaExprParameter:\n case DeclaratorContext::ObjCParameter:\n case DeclaratorContext::ObjCResult:\n case DeclaratorContext::KNRTypeList:\n case DeclaratorContext::RequiresExpr:\n // ...\n DiagID = diag::err_type_defined_in_param_type;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:4:7: error: (null) cannot be defined in a parameter type","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:5:11: error: (null) cannot be defined in a parameter type"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:4:7: error: (null) cannot be defined in a parameter type","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:5:11: error: (null) cannot be defined in a parameter type"} | ||
Line 7,212: | Line 7,212: | ||
[h]=p, | [h]=p, | ||
[e]={"d6ab8744dc68",1243553519,Pb,Pb}, | [e]={"d6ab8744dc68",1243553519,Pb,Pb}, | ||
[k]={{K,5411,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n case DeclaratorChunk::Function: {\n if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}}, | [k]={{K,5411,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n // ...\n S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1: error: \'(unnamed enum at clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1)\' cannot be defined in the result type of a function"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1: error: \'(unnamed enum at clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1)\' cannot be defined in the result type of a function"} | ||
Line 7,227: | Line 7,227: | ||
[h]=p, | [h]=p, | ||
[e]={"d6ab8744dc68",1243553519,Pb,Pb}, | [e]={"d6ab8744dc68",1243553519,Pb,Pb}, | ||
[k]={{u,17556,"CreateNewDecl:\n // C++11 [dcl.type]p3:\n // A type-specifier-seq shall not define a class or enumeration [...].\n if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{K,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n case DeclaratorContext::Association:\n DiagID = diag::err_type_defined_in_type_specifier;"}}, | [k]={{u,17556,"CreateNewDecl:\n // ...\n // C++11 [dcl.type]p3:\n // A type-specifier-seq shall not define a class or enumeration [...].\n if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{K,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::TypeName:\n case DeclaratorContext::FunctionalCast:\n case DeclaratorContext::ConversionId:\n case DeclaratorContext::TemplateParam:\n case DeclaratorContext::CXXNew:\n case DeclaratorContext::CXXCatch:\n case DeclaratorContext::ObjCCatch:\n case DeclaratorContext::TemplateArg:\n case DeclaratorContext::TemplateTypeArg:\n case DeclaratorContext::Association:\n DiagID = diag::err_type_defined_in_type_specifier;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"} | ["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"} | ||
Line 7,242: | Line 7,242: | ||
[h]=p, | [h]=p, | ||
[e]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in ","objc: turn warning for property type mismatch in "}, | [e]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in ","objc: turn warning for property type mismatch in "}, | ||
[k]={{W,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}}, | [k]={{W,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // ...\n if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n // ...\n if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/continuation-class-property.m"]={"clang/test/SemaObjC/continuation-class-property.m:41:1: error: type of property \'NSString *\' in class extension does not match property type in primary class","clang/test/SemaObjC/continuation-class-property.m:42:1: error: type of property \'NSRect\' in class extension does not match property type in primary class"} | ["clang/test/SemaObjC/continuation-class-property.m"]={"clang/test/SemaObjC/continuation-class-property.m:41:1: error: type of property \'NSString *\' in class extension does not match property type in primary class","clang/test/SemaObjC/continuation-class-property.m:42:1: error: type of property \'NSRect\' in class extension does not match property type in primary class"} | ||
Line 7,257: | Line 7,257: | ||
[h]=p, | [h]=p, | ||
[e]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.","[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."}, | [e]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.","[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."}, | ||
[k]={{s,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n case BTK__type_pack_element:\n // If the Index is out of bounds, the program is ill-formed.\n if (Index >= Ts.pack_size()) {\n SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}}, | [k]={{s,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n // ...\n case BTK__type_pack_element:\n // ...\n // If the Index is out of bounds, the program is ill-formed.\n if (Index >= Ts.pack_size()) {\n SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/type_pack_element.cpp"]={"clang/test/SemaCXX/type_pack_element.cpp:44:51: error: a parameter pack may not be accessed at an out of bounds index"} | ["clang/test/SemaCXX/type_pack_element.cpp"]={"clang/test/SemaCXX/type_pack_element.cpp:44:51: error: a parameter pack may not be accessed at an out of bounds index"} | ||
Line 7,272: | Line 7,272: | ||
[h]=v, | [h]=v, | ||
[e]={"e4a5a90e8d6b",1345162118,Rb,Rb}, | [e]={"e4a5a90e8d6b",1345162118,Rb,Rb}, | ||
[k]={{Y,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n while (TryConsumeToken(tok::comma)) {\n if (Flag->isStr(\"layout_compatible\"))\n else if (Flag->isStr(\"must_be_null\"))\n else {\n Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}}, | [k]={{Y,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n // ...\n while (TryConsumeToken(tok::comma)) {\n // ...\n if (Flag->isStr(\"layout_compatible\"))\n // ...\n else if (Flag->isStr(\"must_be_null\"))\n // ...\n else {\n Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-type-safety.c"]={"clang/test/Sema/attr-type-safety.c:15:72: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'","clang/test/Sema/attr-type-safety.c:17:90: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'"} | ["clang/test/Sema/attr-type-safety.c"]={"clang/test/Sema/attr-type-safety.c:15:72: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'","clang/test/Sema/attr-type-safety.c:17:90: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'"} | ||
Line 7,287: | Line 7,287: | ||
[h]=p, | [h]=p, | ||
[e]={"e4a5a90e8d6b",1345162118,Rb,Rb}, | [e]={"e4a5a90e8d6b",1345162118,Rb,Rb}, | ||
[k]={{u,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}, | [k]={{u,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n // ...\n for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n // ...\n if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:16:45: error: \'type_tag_for_datatype\' attribute requires the initializer to be an integral constant expression"} | ["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:16:45: error: \'type_tag_for_datatype\' attribute requires the initializer to be an integral constant expression"} | ||
Line 7,302: | Line 7,302: | ||
[h]=p, | [h]=p, | ||
[e]={"e4a5a90e8d6b",1345162118,Rb,Rb}, | [e]={"e4a5a90e8d6b",1345162118,Rb,Rb}, | ||
[k]={{u,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n if (MagicValueInt->getActiveBits() > 64) {\n Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_too_large) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}} | [k]={{u,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n // ...\n for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n // ...\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 7,314: | Line 7,314: | ||
[h]=v, | [h]=v, | ||
[e]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)","Implement a new type trait __is_trivially_constructible(T, Args...)"}, | [e]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)","Implement a new type trait __is_trivially_constructible(T, Args...)"}, | ||
[k]={{J,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n if (Arity && N != Arity) {\n Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{J,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n if (!Arity && N == 0) {\n Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}}, | [k]={{J,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n if (Arity && N != Arity) {\n Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{J,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n // ...\n if (!Arity && N == 0) {\n Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:5:32: error: type trait requires 1 or more arguments; have 0 arguments"} | ["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:5:32: error: type trait requires 1 or more arguments; have 0 arguments"} | ||
Line 7,329: | Line 7,329: | ||
[h]=p, | [h]=p, | ||
[e]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang","Enable support for __float128 in Clang"}, | [e]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang","Enable support for __float128 in Clang"}, | ||
[k]={{K,1447,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n case DeclSpec::TST_bitint: {\n if (!S.Context.getTargetInfo().hasBitIntType())\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{K,1507,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n case DeclSpec::TST_int128:\n if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{K,1520,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n case DeclSpec::TST_float16:\n // CUDA host and device may have different _Float16 support, therefore\n // do not diagnose _Float16 usage to avoid false alarm.\n // ToDo: more precise diagnostics for CUDA.\n if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{K,1529,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n case DeclSpec::TST_BFloat16:\n if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{K,1553,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n case DeclSpec::TST_float128:\n if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{K,1561,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n case DeclSpec::TST_ibm128:\n if (!S.Context.getTargetInfo().hasIbm128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__ibm128\";"}} | [k]={{K,1447,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_bitint: {\n if (!S.Context.getTargetInfo().hasBitIntType())\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{K,1507,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_int128:\n if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{K,1520,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_float16:\n // CUDA host and device may have different _Float16 support, therefore\n // do not diagnose _Float16 usage to avoid false alarm.\n // ToDo: more precise diagnostics for CUDA.\n if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{K,1529,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_BFloat16:\n if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{K,1553,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_float128:\n if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{K,1561,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\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 7,341: | Line 7,341: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{yb,688,"#endif\n if (Kind == CK_ArrayToPointerDecay) {\n // C17 6.7.1p6 footnote 124: The implementation can treat any register\n // declaration simply as an auto declaration. However, whether or not\n // addressable storage is actually used, the address of any part of an\n // object declared with storage-class specifier register cannot be\n // computed, either explicitly(by use of the unary & operator as discussed\n // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n // array declared with storage-class specifier register is sizeof.\n if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n if (VD->getStorageClass() == SC_Register) {\n Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{r,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}}, | [k]={{yb,688,"#endif\n // ...\n if (Kind == CK_ArrayToPointerDecay) {\n // ...\n // C17 6.7.1p6 footnote 124: The implementation can treat any register\n // declaration simply as an auto declaration. However, whether or not\n // addressable storage is actually used, the address of any part of an\n // object declared with storage-class specifier register cannot be\n // computed, either explicitly(by use of the unary & operator as discussed\n // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n // array declared with storage-class specifier register is sizeof.\n if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n if (VD->getStorageClass() == SC_Register) {\n Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{r,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"} | ["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"} | ||
Line 7,356: | Line 7,356: | ||
[h]=p, | [h]=p, | ||
[e]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.","Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."}, | [e]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.","Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."}, | ||
[k]={{r,14994,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n } else if (isa<ObjCSelectorExpr>(op)) {\n } else if (lval == Expr::LV_MemberFunction) {\n // Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n if (isa<CXXDestructorDecl>(MD))\n Diag(OpLoc, diag::err_typecheck_addrof_dtor) << op->getSourceRange();"}} | [k]={{r,14994,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n } else if (lval == Expr::LV_MemberFunction) {\n // ...\n // 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 7,368: | Line 7,368: | ||
[h]=p, | [h]=p, | ||
[e]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function"}, | [e]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function"}, | ||
[k]={{r,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}} | [k]={{r,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\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 7,380: | Line 7,380: | ||
[h]=p, | [h]=p, | ||
[e]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails.","Issue good ambiguity diagnostic when convesion fails."}, | [e]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails.","Issue good ambiguity diagnostic when convesion fails."}, | ||
[k]={{J,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n case ImplicitConversionSequence::AmbiguousConversion:\n ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{M,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_UserConversionOverloadFailed:\n case OR_Ambiguous:\n FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"},{gb,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n if (OvResult == OR_Ambiguous)\n Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}}, | [k]={{J,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n // ...\n case ImplicitConversionSequence::AmbiguousConversion:\n ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{M,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_Ambiguous:\n FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"},{gb,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:19:15: error: conversion from \'U\' to \'bool\' is ambiguous"} | ["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:19:15: error: conversion from \'U\' to \'bool\' is ambiguous"} | ||
Line 7,395: | Line 7,395: | ||
[h]="ARC Semantic Issue", | [h]="ARC Semantic Issue", | ||
[e]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained"}, | [e]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained"}, | ||
[k]={{r,14313,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_ConstQualified:\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n if (method && var == method->getSelfDecl()) {\n } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n DiagID = diag::err_typecheck_arc_assign_externally_retained;"}}, | [k]={{r,14313,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_ConstQualified:\n // ...\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 // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\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 // ...\n if (method && var == method->getSelfDecl()) {\n // ...\n } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n DiagID = diag::err_typecheck_arc_assign_externally_retained;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:18:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:19:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:20:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:26:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:36:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:45:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:51:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:61:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:68:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:74:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:81:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:85:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:91:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:95:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:103:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:107:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:114:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC"} | ["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:18:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:19:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:20:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:26:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:36:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:45:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:51:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:61:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:68:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:74:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:81:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:85:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:91:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:95:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:103:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:107:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:114:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC"} | ||
Line 7,410: | Line 7,410: | ||
[h]="ARC Semantic Issue", | [h]="ARC Semantic Issue", | ||
[e]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>."}, | [e]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>."}, | ||
[k]={{r,14309,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_ConstQualified:\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n if (method && var == method->getSelfDecl()) {\n DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}, | [k]={{r,14309,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_ConstQualified:\n // ...\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 // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\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 // ...\n if (method && var == method->getSelfDecl()) {\n DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:142:8: error: cannot assign to \'self\' outside of a method in the init family"} | ["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:142:8: error: cannot assign to \'self\' outside of a method in the init family"} | ||
Line 7,425: | Line 7,425: | ||
[h]="ARC Semantic Issue", | [h]="ARC Semantic Issue", | ||
[e]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>."}, | [e]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>."}, | ||
[k]={{r,14304,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_ConstQualified:\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n if (method && var == method->getSelfDecl()) {\n DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}} | [k]={{r,14304,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_ConstQualified:\n // ...\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 // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\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 // ...\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 7,437: | Line 7,437: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}}, | [k]={{r,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n // ...\n return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:74:12: error: arithmetic on a pointer to an incomplete type \'struct A\'","clang/test/Sema/empty1.c:82:12: error: arithmetic on a pointer to an incomplete type \'struct emp_1[]\'"} | ["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:74:12: error: arithmetic on a pointer to an incomplete type \'struct A\'","clang/test/Sema/empty1.c:82:12: error: arithmetic on a pointer to an incomplete type \'struct emp_1[]\'"} | ||
Line 7,452: | Line 7,452: | ||
[h]="ARC Semantic Issue", | [h]="ARC Semantic Issue", | ||
[e]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting."}, | [e]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting."}, | ||
[k]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n bool VisitBinaryOperator(BinaryOperator *Exp) {\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n if (var->isARCPseudoStrong()) {\n if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{r,14343,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_ConstQualified:\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n if (method && var == method->getSelfDecl()) {\n } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n } else {\n DiagID = diag::err_typecheck_arr_assign_enumeration;"}}, | [k]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n // ...\n bool VisitBinaryOperator(BinaryOperator *Exp) {\n // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\n if (var->isARCPseudoStrong()) {\n // ...\n if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{r,14343,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_ConstQualified:\n // ...\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 // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\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 // ...\n if (method && var == method->getSelfDecl()) {\n // ...\n } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n // ...\n } else {\n DiagID = diag::err_typecheck_arr_assign_enumeration;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:306:7: error: fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this"} | ["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:306:7: error: fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this"} | ||
Line 7,467: | Line 7,467: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14347,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_ArrayTemporary:\n DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}} | [k]={{r,14347,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_ArrayType:\n case Expr::MLV_ArrayTemporary:\n DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}} | ||
}, | }, | ||
["err_typecheck_assign_const"]={ | ["err_typecheck_assign_const"]={ | ||
Line 7,479: | Line 7,479: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // Loop to process MemberExpr chains.\n while (true) {\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{r,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // Loop to process MemberExpr chains.\n while (true) {\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n if (VDecl->getType().isConstQualified()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{r,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{r,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n // Point to variable declaration.\n if (const ValueDecl *VD = DRE->getDecl()) {\n if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{r,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n } else if (isa<CXXThisExpr>(E)) {\n if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n if (MD->isConst()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{r,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{r,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n // We walk the record hierarchy breadth-first to ensure that we print\n // diagnostics in field nesting order.\n while (RecordTypeList.size() > NextToCheckIndex) {\n for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n if (FieldTy.isConstQualified()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}}, | [k]={{r,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n // Loop to process MemberExpr chains.\n while (true) {\n // ...\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n // ...\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n // ...\n if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{r,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n // Loop to process MemberExpr chains.\n while (true) {\n // ...\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n // ...\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n // ...\n } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n if (VDecl->getType().isConstQualified()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{r,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{r,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n // Point to variable declaration.\n if (const ValueDecl *VD = DRE->getDecl()) {\n if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{r,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n // ...\n } else if (isa<CXXThisExpr>(E)) {\n if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n if (MD->isConst()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{r,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{r,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n // ...\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 // ...\n for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n // ...\n if (FieldTy.isConstQualified()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:7:5: error: cannot assign to variable \'x\' with const-qualified type \'const int\'"} | ["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:7:5: error: cannot assign to variable \'x\' with const-qualified type \'const int\'"} | ||
Line 7,494: | Line 7,494: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{gb,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}}, | [k]={{gb,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n // ...\n if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:38:12: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:49:15: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:60:15: error: value of type \'Na\' is not contextually convertible to \'bool\'"} | ["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:38:12: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:49:15: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:60:15: error: value of type \'Na\' is not contextually convertible to \'bool\'"} | ||
Line 7,509: | Line 7,509: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,2724,"#include \"clang/Basic/Builtins.def\"\n case Builtin::BI__builtin_elementwise_copysign: {\n if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{w,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{w,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{w,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n for (int I = 1; I < 3; ++I) {\n if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}}, | [k]={{w,2724,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__builtin_elementwise_copysign: {\n // ...\n if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{w,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n // ...\n if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{w,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n // ...\n if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{w,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n // ...\n for (int I = 1; I < 3; ++I) {\n if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins-elementwise-math.c"]={"clang/test/Sema/builtins-elementwise-math.c:47:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:62:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:65:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:105:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:120:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:123:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:163:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:178:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:181:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:218:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:233:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:236:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:442:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:457:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:460:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:690:53: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:693:50: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:697:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:700:50: error: arguments are of different types (\'float\' vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:705:56: error: arguments are of different types (\'double4\' (vector of 4 \'double\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:708:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'double4\' (vector of 4 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:711:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:714:55: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:739:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:742:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:745:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:748:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:751:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:754:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:757:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:760:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:763:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double2\' (vector of 2 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:766:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:769:37: error: arguments are of different types (\'double\' vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:772:37: error: arguments are of different types (\'double\' vs \'double2\' (vector of 2 \'double\' values))"} | ["clang/test/Sema/builtins-elementwise-math.c"]={"clang/test/Sema/builtins-elementwise-math.c:47:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:62:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:65:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:105:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:120:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:123:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:163:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:178:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:181:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:218:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:233:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:236:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:442:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:457:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:460:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:690:53: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:693:50: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:697:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:700:50: error: arguments are of different types (\'float\' vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:705:56: error: arguments are of different types (\'double4\' (vector of 4 \'double\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:708:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'double4\' (vector of 4 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:711:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:714:55: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:739:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:742:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:745:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:748:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:751:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:754:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:757:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:760:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:763:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double2\' (vector of 2 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:766:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:769:37: error: arguments are of different types (\'double\' vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:772:37: error: arguments are of different types (\'double\' vs \'double2\' (vector of 2 \'double\' values))"} | ||
Line 7,524: | Line 7,524: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends. This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n // If the common type isn\'t a real floating type, then the arguments were\n // invalid for this operation.\n if (Res.isNull() || !Res->isRealFloatingType())\n return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}}, | [k]={{w,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends. This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n // ...\n // If the common type isn\'t a real floating type, then the arguments were\n // invalid for this operation.\n if (Res.isNull() || !Res->isRealFloatingType())\n return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:8:32: error: ordered compare requires two args of floating point type (\'int\' and \'int\')","clang/test/Sema/builtins.c:15:32: error: ordered compare requires two args of floating point type (\'int *\' and \'double\')"} | ["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:8:32: error: ordered compare requires two args of floating point type (\'int\' and \'int\')","clang/test/Sema/builtins.c:15:32: error: ordered compare requires two args of floating point type (\'int *\' and \'double\')"} | ||
Line 7,539: | Line 7,539: | ||
[h]=p, | [h]=p, | ||
[e]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they ","PR4836, part 1: add Sema support for __builtin_isnan and friends; they "}, | [e]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they ","PR4836, part 1: add Sema support for __builtin_isnan and friends; they "}, | ||
[k]={{w,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends. This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n // This operation requires a non-_Complex floating-point number.\n if (!OrigArg->getType()->isRealFloatingType())\n return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}}, | [k]={{w,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends. This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n // ...\n // This operation requires a non-_Complex floating-point number.\n if (!OrigArg->getType()->isRealFloatingType())\n return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:9:28: error: floating point classification requires argument of floating point type (passed in \'int\')","clang/test/Sema/builtin-unary-fp.c:13:45: error: floating point classification requires argument of floating point type (passed in \'int\')"} | ["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:9:28: error: floating point classification requires argument of floating point type (passed in \'int\')","clang/test/Sema/builtin-unary-fp.c:13:45: error: floating point classification requires argument of floating point type (passed in \'int\')"} | ||
Line 7,554: | Line 7,554: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,7417,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n retry:\n if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n if (!FuncT)\n return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{r,7483,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n retry:\n if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n } else {\n return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}}, | [k]={{r,7417,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n // ...\n retry:\n if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n // ...\n if (!FuncT)\n return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{r,7483,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n // ...\n retry:\n if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n // ...\n } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n // ...\n } else {\n // ...\n return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:17:10: error: called object type \'test0::Test::E\' is not a function or function pointer"} | ["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:17:10: error: called object type \'test0::Test::E\' is not a function or function pointer"} | ||
Line 7,569: | Line 7,569: | ||
[h]=p, | [h]=p, | ||
[e]={ab,1582847864,I,I}, | [e]={ab,1582847864,I,I}, | ||
[k]={{w,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n for (unsigned I = 0; I != 2; ++I) {\n // Despite supporting _Complex int, GCC requires a real floating point type\n // for the operands of __builtin_complex.\n if (!T->isRealFloatingType()) {\n return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}}, | [k]={{w,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n // ...\n for (unsigned I = 0; I != 2; ++I) {\n // ...\n // Despite supporting _Complex int, GCC requires a real floating point type\n // for the operands of __builtin_complex.\n if (!T->isRealFloatingType()) {\n return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:373:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:374:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:375:26: error: argument type \'int\' is not a real floating point type"} | ["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:373:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:374:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:375:26: error: argument type \'int\' is not a real floating point type"} | ||
Line 7,584: | Line 7,584: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{w,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n if (NumArgs < NumRequiredArgs) {\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{r,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n else\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{pb,1803,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n // FIXME. This need be cleaned up.\n if (Args.size() < NumNamedArgs) {\n Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}}, | [k]={{w,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n // ...\n return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{w,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n // ...\n if (NumArgs < NumRequiredArgs) {\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{r,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{pb,1803,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n // ...\n // FIXME. This need be cleaned up.\n if (Args.size() < NumNamedArgs) {\n Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:10:25: error: too few arguments to function call, expected 1, have 0","clang/test/Sema/builtin-unary-fp.c:15:43: error: too few arguments to function call, expected 6, have 5"} | ["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:10:25: error: too few arguments to function call, expected 1, have 0","clang/test/Sema/builtin-unary-fp.c:15:43: error: too few arguments to function call, expected 6, have 5"} | ||
Line 7,599: | Line 7,599: | ||
[h]=p, | [h]=p, | ||
[e]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number","Expand argument diagnostic for too few arguments to give the number"}, | [e]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number","Expand argument diagnostic for too few arguments to give the number"}, | ||
[k]={{w,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n // We need at least one argument.\n if (TheCall->getNumArgs() < 1) {\n S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{w,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// uint num_events_in_wait_list,\n/// clk_event_t *event_wait_list,\n/// clk_event_t *event_ret,\n/// void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// void (^block)(local void*, ...),\n/// uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// uint num_events_in_wait_list,\n/// clk_event_t *event_wait_list,\n/// clk_event_t *event_ret,\n/// void (^block)(local void*, ...),\n/// uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n if (NumArgs < 4) {\n S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{w,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // Ensure that we have at least one argument to do type inference from.\n if (TheCall->getNumArgs() < 1) {\n Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // Now that we know how many fixed arguments we expect, first check that we\n // have at least that many.\n if (TheCall->getNumArgs() < 1 + NumFixed) {\n Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n if (Call->getNumArgs() < 3)\n return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{w,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (TheCall->getNumArgs() < 2)\n return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{r,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n else\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}}, | [k]={{w,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n // We need at least one argument.\n if (TheCall->getNumArgs() < 1) {\n S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{w,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// uint num_events_in_wait_list,\n/// clk_event_t *event_wait_list,\n/// clk_event_t *event_ret,\n/// void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// void (^block)(local void*, ...),\n/// uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// uint num_events_in_wait_list,\n/// clk_event_t *event_wait_list,\n/// clk_event_t *event_ret,\n/// void (^block)(local void*, ...),\n/// uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n // ...\n if (NumArgs < 4) {\n S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{w,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // ...\n // Ensure that we have at least one argument to do type inference from.\n if (TheCall->getNumArgs() < 1) {\n Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // ...\n // Now that we know how many fixed arguments we expect, first check that we\n // have at least that many.\n if (TheCall->getNumArgs() < 1 + NumFixed) {\n Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n // ...\n if (Call->getNumArgs() < 3)\n return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{w,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (TheCall->getNumArgs() < 2)\n return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{r,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:182:12: error: too few arguments to function call, expected at least 2, have 0"} | ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:182:12: error: too few arguments to function call, expected at least 2, have 0"} | ||
Line 7,614: | Line 7,614: | ||
[h]=p, | [h]=p, | ||
[e]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function"}, | [e]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function"}, | ||
[k]={{r,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}}, | [k]={{r,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:181:12: error: too few arguments to function call, at least argument \'a\' must be specified"} | ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:181:12: error: too few arguments to function call, at least argument \'a\' must be specified"} | ||
Line 7,629: | Line 7,629: | ||
[h]=p, | [h]=p, | ||
[e]={"476c823ec8fd",1373325224,xb,xb}, | [e]={"476c823ec8fd",1373325224,xb,xb}, | ||
[k]={{r,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}} | [k]={{r,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\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 7,641: | Line 7,641: | ||
[h]=p, | [h]=p, | ||
[e]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function"}, | [e]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function"}, | ||
[k]={{r,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}}, | [k]={{r,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:177:12: error: too few arguments to function call, single argument \'a\' was not specified"} | ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:177:12: error: too few arguments to function call, single argument \'a\' was not specified"} | ||
Line 7,656: | Line 7,656: | ||
[h]=p, | [h]=p, | ||
[e]={"476c823ec8fd",1373325224,xb,xb}, | [e]={"476c823ec8fd",1373325224,xb,xb}, | ||
[k]={{r,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}, | [k]={{r,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp:15:7: error: too few arguments to function call, expected 1, have 0; did you mean \'A::f\'?"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp:15:7: error: too few arguments to function call, expected 1, have 0; did you mean \'A::f\'?"} | ||
Line 7,671: | Line 7,671: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking. Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{w,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n } else if (Args.size() > AdjustedNumArgs) {\n Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n if (TheCall->getNumArgs() != 0) {\n Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{r,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n else\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{pb,1900,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n // Promote additional arguments to variadic methods.\n if (Method->isVariadic()) {\n } else {\n // Check for extra arguments to non-variadic methods.\n if (Args.size() != NumNamedArgs) {\n Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}}, | [k]={{w,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking. Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n // ...\n return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{w,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n // ...\n } else if (Args.size() > AdjustedNumArgs) {\n Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n if (TheCall->getNumArgs() != 0) {\n Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{r,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{pb,1900,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n // ...\n // Promote additional arguments to variadic methods.\n if (Method->isVariadic()) {\n // ...\n } else {\n // Check for extra arguments to non-variadic methods.\n if (Args.size() != NumNamedArgs) {\n Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:11:27: error: too many arguments to function call, expected 1, have 2","clang/test/Sema/builtin-unary-fp.c:16:48: error: too many arguments to function call, expected 6, have 7"} | ["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:11:27: error: too many arguments to function call, expected 1, have 2","clang/test/Sema/builtin-unary-fp.c:16:48: error: too many arguments to function call, expected 6, have 7"} | ||
Line 7,686: | Line 7,686: | ||
[h]=p, | [h]=p, | ||
[e]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give","Expand the argument diagnostics for too many arguments and give"}, | [e]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give","Expand the argument diagnostics for too many arguments and give"}, | ||
[k]={{w,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{w,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n if (NumArgs > 3)\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{w,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n if (NumArgs >= NumRequiredArgs + 0x100) {\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{r,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n else\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}, | [k]={{w,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n // ...\n return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{w,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n // ...\n if (NumArgs > 3)\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{w,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n // ...\n if (NumArgs >= NumRequiredArgs + 0x100) {\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{r,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/builtin-prefetch.c"]={"clang/test/Sema/builtin-prefetch.c:8:33: error: too many arguments to function call, expected at most 3, have 4"} | ["clang/test/Sema/builtin-prefetch.c"]={"clang/test/Sema/builtin-prefetch.c:8:33: error: too many arguments to function call, expected at most 3, have 4"} | ||
Line 7,701: | Line 7,701: | ||
[h]=p, | [h]=p, | ||
[e]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including"}, | [e]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including"}, | ||
[k]={{r,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}, | [k]={{r,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/default1.cpp"]={"clang/test/SemaCXX/default1.cpp:69:10: error: too many arguments to function call, expected at most single argument \'f\', have 2 arguments"} | ["clang/test/SemaCXX/default1.cpp"]={"clang/test/SemaCXX/default1.cpp:69:10: error: too many arguments to function call, expected at most single argument \'f\', have 2 arguments"} | ||
Line 7,716: | Line 7,716: | ||
[h]=p, | [h]=p, | ||
[e]={"476c823ec8fd",1373325224,xb,xb}, | [e]={"476c823ec8fd",1373325224,xb,xb}, | ||
[k]={{r,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}} | [k]={{r,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\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 7,728: | Line 7,728: | ||
[h]=p, | [h]=p, | ||
[e]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including"}, | [e]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including"}, | ||
[k]={{r,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}, | [k]={{r,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:176:15: error: too many arguments to function call, expected single argument \'a\', have 2 arguments"} | ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:176:15: error: too many arguments to function call, expected single argument \'a\', have 2 arguments"} | ||
Line 7,743: | Line 7,743: | ||
[h]=p, | [h]=p, | ||
[e]={"476c823ec8fd",1373325224,xb,xb}, | [e]={"476c823ec8fd",1373325224,xb,xb}, | ||
[k]={{r,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}, | [k]={{r,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\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 // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:33:7: error: too many arguments to function call, expected 0, have 1; did you mean \'N::f\'?"} | ["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:33:7: error: too many arguments to function call, expected 0, have 1; did you mean \'N::f\'?"} | ||
Line 7,758: | Line 7,758: | ||
[h]=p, | [h]=p, | ||
[e]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C. Improves diagnostics for cast to","Check for casts to an incomplete type in C. Improves diagnostics for cast to"}, | [e]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C. Improves diagnostics for cast to","Check for casts to an incomplete type in C. Improves diagnostics for cast to"}, | ||
[k]={{rb,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{rb,3257,"void CastOperation::CheckBuiltinBitCast() {\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{r,21464,"/// Check a cast of an unknown-any type. We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}}, | [k]={{rb,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{rb,3257,"void CastOperation::CheckBuiltinBitCast() {\n // ...\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{r,21464,"/// Check a cast of an unknown-any type. We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n // ...\n if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/cast-incomplete.c"]={"clang/test/Sema/cast-incomplete.c:9:3: error: cast to incomplete type \'enum x\'","clang/test/Sema/cast-incomplete.c:10:3: error: cast to incomplete type \'struct y\'","clang/test/Sema/cast-incomplete.c:11:3: error: cast to incomplete type \'union z\'","clang/test/Sema/cast-incomplete.c:12:3: error: cast to incomplete type \'union z\'"} | ["clang/test/Sema/cast-incomplete.c"]={"clang/test/Sema/cast-incomplete.c:9:3: error: cast to incomplete type \'enum x\'","clang/test/Sema/cast-incomplete.c:10:3: error: cast to incomplete type \'struct y\'","clang/test/Sema/cast-incomplete.c:11:3: error: cast to incomplete type \'union z\'","clang/test/Sema/cast-incomplete.c:12:3: error: cast to incomplete type \'union z\'"} | ||
Line 7,773: | Line 7,773: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{rb,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // GCC\'s cast to union extension.\n if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n } else {\n Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}}, | [k]={{rb,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // ...\n // GCC\'s cast to union extension.\n if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n // ...\n if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n // ...\n } else {\n Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:8:5: error: cast to union type from type \'int *\' not present in union","clang/test/Sema/cast-to-union.c:9:5: error: cast to union type from type \'unsigned int\' not present in union","clang/test/Sema/cast-to-union.c:13:14: error: cast to union type from type \'double\' not present in union"} | ["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:8:5: error: cast to union type from type \'int *\' not present in union","clang/test/Sema/cast-to-union.c:9:5: error: cast to union type from type \'unsigned int\' not present in union","clang/test/Sema/cast-to-union.c:13:14: error: cast to union type from type \'double\' not present in union"} | ||
Line 7,788: | Line 7,788: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n } else {\n ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}}, | [k]={{r,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n // ...\n if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n // ...\n } else {\n // ...\n ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/builtin_types_compatible.c"]={"clang/test/Parser/builtin_types_compatible.c:37:29: error: \'__builtin_choose_expr\' requires a constant expression"} | ["clang/test/Parser/builtin_types_compatible.c"]={"clang/test/Parser/builtin_types_compatible.c:37:29: error: \'__builtin_choose_expr\' requires a constant expression"} | ||
Line 7,803: | Line 7,803: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // Handle block pointer types.\n if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // Allow block pointers to be compared with null pointer constants.\n if (!IsOrdered && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) {\n if (!LHSIsNull && !RHSIsNull) {\n if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) || (LHSType->isPointerType() && LHSType->castAs<PointerType>()->getPointeeType()->isVoidType())))\n Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}} | [k]={{r,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n // Handle block pointer types.\n if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n // ...\n if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\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 7,842: | Line 7,842: | ||
[h]=p, | [h]=p, | ||
[e]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect"}, | [e]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect"}, | ||
[k]={{r,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n if (LangOpts.DebuggerSupport) {\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n } else if (getLangOpts().CPlusPlus) {\n DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}}, | [k]={{r,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/over/over.built/spaceship.cpp"]={"clang/test/CXX/over/over.built/spaceship.cpp:16:12: error: comparison between pointer and integer (\'int\' and \'int *\')"} | ["clang/test/CXX/over/over.built/spaceship.cpp"]={"clang/test/CXX/over/over.built/spaceship.cpp:16:12: error: comparison between pointer and integer (\'int\' and \'int *\')"} | ||
Line 7,857: | Line 7,857: | ||
[h]=p, | [h]=p, | ||
[e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector"}, | [e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector"}, | ||
[k]={{r,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{r,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}}, | [k]={{r,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // ...\n if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{r,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // ...\n if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:113:12: error: used type \'__global int *\' where integer or floating point type is required"} | ["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:113:12: error: used type \'__global int *\' where integer or floating point type is required"} | ||
Line 7,872: | Line 7,872: | ||
[h]=p, | [h]=p, | ||
[e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector"}, | [e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector"}, | ||
[k]={{r,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{r,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}}, | [k]={{r,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{r,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:102:12: error: used type \'float\' where floating point type is not allowed","clang/test/SemaOpenCL/cond.cl:107:12: error: used type \'float2\' (vector of 2 \'float\' values) where floating point type is not allowed"} | ["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:102:12: error: used type \'float\' where floating point type is not allowed","clang/test/SemaOpenCL/cond.cl:107:12: error: used type \'float2\' (vector of 2 \'float\' values) where floating point type is not allowed"} | ||
Line 7,887: | Line 7,887: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{rb,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{r,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}}, | [k]={{rb,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // ...\n Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{r,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:10:9: error: used type \'struct foo\' where arithmetic or pointer type is required"} | ["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:10:9: error: used type \'struct foo\' where arithmetic or pointer type is required"} | ||
Line 7,902: | Line 7,902: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // Diagnose attempts to convert between __ibm128, __float128 and long double\n // where such conversions currently can\'t be handled.\n if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // | [k]={{r,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n // ...\n if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n // ...\n S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n // Diagnose attempts to convert between __ibm128, __float128 and long double\n // where such conversions currently can\'t be handled.\n if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n // If both operands have arithmetic type, do the usual arithmetic conversions\n // to find a common type: C99 6.5.15p3,5.\n if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n // Disallow invalid arithmetic conversions, such as those between bit-\n // precise integers types of different sizes, or between a bit-precise\n // integer and another type.\n if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,9334,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6261,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // ...\n case OR_No_Viable_Function:\n // ...\n Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6766,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n/// (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n/// (most-significant-bit-set(a[0]) ? b[0] : c[0], .. ,\n/// most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\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 // ...\n if (ResTy.isNull()) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6804,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n/// (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n/// (most-significant-bit-set(a[0]) ? b[0] : c[0], .. ,\n/// most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"} | ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"} | ||
Line 7,917: | Line 7,917: | ||
[h]=p, | [h]=p, | ||
[e]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and","Initial steps to improve diagnostics when there is a NULL and"}, | [e]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and","Initial steps to improve diagnostics when there is a NULL and"}, | ||
[k]={{r,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer. Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}}, | [k]={{r,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer. Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:51:12: error: non-pointer operand type \'A\' incompatible with nullptr","clang/test/SemaCXX/nullptr.cpp:52:12: error: non-pointer operand type \'A\' incompatible with nullptr"} | ["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:51:12: error: non-pointer operand type \'A\' incompatible with nullptr","clang/test/SemaCXX/nullptr.cpp:52:12: error: non-pointer operand type \'A\' incompatible with nullptr"} | ||
Line 7,932: | Line 7,932: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case CompatiblePointerDiscardsQualifiers:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}}, | [k]={{r,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case CompatiblePointerDiscardsQualifiers:\n // ...\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:405:9: error: assigning to \'T\' (aka \'const int *(*)[]\') from \'S\' (aka \'const int *const (*)[]\') discards qualifiers"} | ["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:405:9: error: assigning to \'T\' (aka \'const int *(*)[]\') from \'S\' (aka \'const int *const (*)[]\') discards qualifiers"} | ||
Line 7,947: | Line 7,947: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n case PPC::BI__builtin_ppc_minfs: {\n for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n if (TheCall->getArg(I)->getType() != ArgType)\n return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{w,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{w,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{w,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n while (*TypeStr != \'\\0\') {\n // The only case where the argument type and expected type are allowed to\n // mismatch is if the argument type is a non-void pointer (or array) and\n // expected type is a void pointer.\n if (StrippedRVType != ExpectedType)\n if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{r,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case Incompatible:\n DiagKind = diag::err_typecheck_convert_incompatible;"}}, | [k]={{w,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_maxfe:\n case PPC::BI__builtin_ppc_minfe:\n case PPC::BI__builtin_ppc_maxfl:\n case PPC::BI__builtin_ppc_minfl:\n case PPC::BI__builtin_ppc_maxfs:\n case PPC::BI__builtin_ppc_minfs: {\n // ...\n for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n if (TheCall->getArg(I)->getType() != ArgType)\n return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{w,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n // ...\n if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{w,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n // ...\n if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{w,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n // ...\n while (*TypeStr != \'\\0\') {\n // ...\n // The only case where the argument type and expected type are allowed to\n // mismatch is if the argument type is a non-void pointer (or array) and\n // expected type is a void pointer.\n if (StrippedRVType != ExpectedType)\n if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{r,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case Incompatible:\n // ...\n DiagKind = diag::err_typecheck_convert_incompatible;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:17:7: error: assigning to \'C\' (aka \'void (X::*)() noexcept\') from incompatible type \'void (X::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:20:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:21:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications"} | ["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:17:7: error: assigning to \'C\' (aka \'void (X::*)() noexcept\') from incompatible type \'void (X::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:20:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:21:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications"} | ||
Line 7,962: | Line 7,962: | ||
[h]=p, | [h]=p, | ||
[e]={"d79b5a85b059",1240354302,"Tighten up blocks type checking. This was discussed back in the","Tighten up blocks type checking. This was discussed back in the"}, | [e]={"d79b5a85b059",1240354302,"Tighten up blocks type checking. This was discussed back in the","Tighten up blocks type checking. This was discussed back in the"}, | ||
[k]={{r,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatibleBlockPointer:\n DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}}, | [k]={{r,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleBlockPointer:\n DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:10: error: incompatible block pointer types initializing \'void (^)(void)\' with an expression of type \'const void (^)(void)\'"} | ["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:10: error: incompatible block pointer types initializing \'void (^)(void)\' with an expression of type \'const void (^)(void)\'"} | ||
Line 7,977: | Line 7,977: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatibleFunctionPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}}, | [k]={{r,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleFunctionPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:14:7: error: incompatible function pointer types assigning to \'A\' (aka \'void (*)() noexcept\') from \'void (*)()\'"} | ["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:14:7: error: incompatible function pointer types assigning to \'A\' (aka \'void (*)() noexcept\') from \'void (*)()\'"} | ||
Line 7,992: | Line 7,992: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatiblePointer:\n if (Action == AA_Passing_CFAudited) {\n } else if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}}, | [k]={{r,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointer:\n if (Action == AA_Passing_CFAudited) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp:13:18: error: incompatible pointer types assigning to \'int *\' from \'float *\'"} | ["clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp:13:18: error: incompatible pointer types assigning to \'int *\' from \'float *\'"} | ||
Line 8,007: | Line 8,007: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatiblePointerSign:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{r,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}}, | [k]={{r,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerSign:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{r,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/incompatible-sign.cpp"]={"clang/test/Sema/incompatible-sign.cpp:7:7: error: assigning to \'signed char *\' from \'char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not","clang/test/Sema/incompatible-sign.cpp:13:7: error: assigning to \'char *\' from \'unsigned char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not"} | ["clang/test/Sema/incompatible-sign.cpp"]={"clang/test/Sema/incompatible-sign.cpp:7:7: error: assigning to \'signed char *\' from \'char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not","clang/test/Sema/incompatible-sign.cpp:13:7: error: assigning to \'char *\' from \'unsigned char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not"} | ||
Line 8,022: | Line 8,022: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IntToPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_int_pointer;"}}, | [k]={{r,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IntToPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_int_pointer;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"} | ["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"} | ||
Line 8,037: | Line 8,037: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case PointerToInt:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_pointer_int;"}}, | [k]={{r,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case PointerToInt:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_pointer_int;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjCXX/comptypes-7.mm"]={"clang/test/SemaObjCXX/comptypes-7.mm:38:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id\'","clang/test/SemaObjCXX/comptypes-7.mm:39:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id<MyProtocol>\'","clang/test/SemaObjCXX/comptypes-7.mm:40:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'MyClass *\'","clang/test/SemaObjCXX/comptypes-7.mm:41:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'Class\'"} | ["clang/test/SemaObjCXX/comptypes-7.mm"]={"clang/test/SemaObjCXX/comptypes-7.mm:38:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id\'","clang/test/SemaObjCXX/comptypes-7.mm:39:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id<MyProtocol>\'","clang/test/SemaObjCXX/comptypes-7.mm:40:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'MyClass *\'","clang/test/SemaObjCXX/comptypes-7.mm:41:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'Class\'"} | ||
Line 8,052: | Line 8,052: | ||
[h]=p, | [h]=p, | ||
[e]={O,1576908663,y,y}, | [e]={O,1576908663,y,y}, | ||
[k]={{r,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case FunctionVoidPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_pointer_void_func;"}} | [k]={{r,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\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 8,064: | Line 8,064: | ||
[h]=p, | [h]=p, | ||
[e]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case"}, | [e]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case"}, | ||
[k]={{gb,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n case ImplicitConversionSequence::BadConversion:\n if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}}, | [k]={{gb,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // ...\n case ImplicitConversionSequence::AmbiguousConversion:\n case ImplicitConversionSequence::BadConversion:\n if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:71:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type3Helper<(boolTy)false>::Ty\' (aka \'boolTy\')","clang/test/Misc/integer-literal-printing.cpp:73:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type4Helper<(charTy)\'\\x00\'>::Ty\' (aka \'charTy\')","clang/test/Misc/integer-literal-printing.cpp:74:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type5Helper<(scharTy)\'\\x00\'>::Ty\' (aka \'scharTy\')","clang/test/Misc/integer-literal-printing.cpp:75:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type6Helper<(ucharTy)\'\\x00\'>::Ty\' (aka \'ucharTy\')","clang/test/Misc/integer-literal-printing.cpp:76:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type7Helper<(wcharTy)L\'\\x00\'>::Ty\' (aka \'wcharTy\')","clang/test/Misc/integer-literal-printing.cpp:77:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type8Helper<(char16Ty)u\'\\x00\'>::Ty\' (aka \'char16Ty\')","clang/test/Misc/integer-literal-printing.cpp:78:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type9Helper<(char32Ty)u\'\\x00\'>::Ty\' (aka \'char32Ty\')"} | ["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:71:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type3Helper<(boolTy)false>::Ty\' (aka \'boolTy\')","clang/test/Misc/integer-literal-printing.cpp:73:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type4Helper<(charTy)\'\\x00\'>::Ty\' (aka \'charTy\')","clang/test/Misc/integer-literal-printing.cpp:74:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type5Helper<(scharTy)\'\\x00\'>::Ty\' (aka \'scharTy\')","clang/test/Misc/integer-literal-printing.cpp:75:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type6Helper<(ucharTy)\'\\x00\'>::Ty\' (aka \'ucharTy\')","clang/test/Misc/integer-literal-printing.cpp:76:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type7Helper<(wcharTy)L\'\\x00\'>::Ty\' (aka \'wcharTy\')","clang/test/Misc/integer-literal-printing.cpp:77:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type8Helper<(char16Ty)u\'\\x00\'>::Ty\' (aka \'char16Ty\')","clang/test/Misc/integer-literal-printing.cpp:78:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type9Helper<(char32Ty)u\'\\x00\'>::Ty\' (aka \'char32Ty\')"} | ||
Line 8,079: | Line 8,079: | ||
[h]=p, | [h]=p, | ||
[e]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case"}, | [e]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case"}, | ||
[k]={{gb,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // Check that we would only use permitted conversions.\n if (!CheckConvertedConstantConversions(S, *SCS)) {\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}}, | [k]={{gb,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // ...\n // Check that we would only use permitted conversions.\n if (!CheckConvertedConstantConversions(S, *SCS)) {\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:13: error: conversion from \'void *\' to \'bool\' is not allowed in a converted constant expression"} | ["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:13: error: conversion from \'void *\' to \'bool\' is not allowed in a converted constant expression"} | ||
Line 8,094: | Line 8,094: | ||
[h]=p, | [h]=p, | ||
[e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."}, | [e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."}, | ||
[k]={{gb,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // [...] and where the reference binding (if any) binds directly.\n if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}}, | [k]={{gb,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // ...\n // [...] and where the reference binding (if any) binds directly.\n if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:231:5: error: conversion from \'int\' to \'const int &\' in converted constant expression would bind reference to a temporary"} | ["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:231:5: error: conversion from \'int\' to \'const int &\' in converted constant expression would bind reference to a temporary"} | ||
Line 8,109: | Line 8,109: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n for (ParmVarDecl *Param : Parameters) {\n if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{u,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if (T->isVoidType()) {\n // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n // of objects and functions.\n if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{u,13202,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n if (!VDecl->getType()->isDependentType()) {\n if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{u,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{u,13728,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{u,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n case VarDecl::DeclarationOnly:\n if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{u,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n if (!Var->hasAttr<AliasAttr>()) {\n if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{A,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{r,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}}, | [k]={{w,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n // ...\n for (ParmVarDecl *Param : Parameters) {\n // ...\n if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{u,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (T->isVoidType()) {\n // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n // of objects and functions.\n if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{u,13202,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n // ...\n if (!VDecl->getType()->isDependentType()) {\n // ...\n if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{u,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n // ...\n if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{u,13728,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n // ...\n if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{u,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n case VarDecl::DeclarationOnly:\n // ...\n if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{u,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n if (!Var->hasAttr<AliasAttr>()) {\n if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{A,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{r,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n // ...\n } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp:7:8: error: variable has incomplete type \'X<int>\'"} | ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp:7:8: error: variable has incomplete type \'X<int>\'"} | ||
Line 8,124: | Line 8,124: | ||
[h]=p, | [h]=p, | ||
[e]={Tb,1260399737,lb,lb}, | [e]={Tb,1260399737,lb,lb}, | ||
[k]={{M,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_UserConversionOverloadFailed:\n case OR_Deleted: {\n S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}, | [k]={{M,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_Deleted: {\n S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:34:7: error: conversion function from \'WithDel\' to \'int\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:74:9: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:83:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:85:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function"} | ["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:34:7: error: conversion function from \'WithDel\' to \'int\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:74:9: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:83:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:85:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function"} | ||
Line 8,139: | Line 8,139: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14370,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_DuplicateVectorComponents:\n DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}}, | [k]={{r,14370,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_DuplicateVectorComponents:\n DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/ext_vector_components.c"]={"clang/test/Sema/ext_vector_components.c:29:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:30:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:31:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:33:13: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:56:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:57:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:58:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:60:13: error: vector is not assignable (contains duplicate components)"} | ["clang/test/Sema/ext_vector_components.c"]={"clang/test/Sema/ext_vector_components.c:29:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:30:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:31:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:33:13: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:56:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:57:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:58:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:60:13: error: vector is not assignable (contains duplicate components)"} | ||
Line 8,154: | Line 8,154: | ||
[h]=p, | [h]=p, | ||
[e]={ac,1615397021,hb,hb}, | [e]={ac,1615397021,hb,hb}, | ||
[k]={{w,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n if (!ArgTy->hasFloatingRepresentation())\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}}, | [k]={{w,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n // ...\n if (!ArgTy->hasFloatingRepresentation())\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/arithmetic-fence-builtin.c"]={"clang/test/Sema/arithmetic-fence-builtin.c:21:27: error: invalid operand of type \'stype\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:32:31: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'float *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'int *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:12:34: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required"} | ["clang/test/Sema/arithmetic-fence-builtin.c"]={"clang/test/Sema/arithmetic-fence-builtin.c:21:27: error: invalid operand of type \'stype\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:32:31: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'float *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'int *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:12:34: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required"} | ||
Line 8,169: | Line 8,169: | ||
[h]=p, | [h]=p, | ||
[e]={"c65605d008dd",1423201495,Db,Db}, | [e]={"c65605d008dd",1423201495,Db,Db}, | ||
[k]={{w,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n if (!IsValidIntegerType(AlignOp->getType())) {\n S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{w,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{r,12117,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // The operands need to be integers.\n if (!LHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12139,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (!RHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{r,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (!LHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (!RHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}}, | [k]={{w,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n // ...\n if (!IsValidIntegerType(AlignOp->getType())) {\n S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{w,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{r,12117,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n // The operands need to be integers.\n if (!LHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12139,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!RHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{r,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!LHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!RHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/ext_vector_ops.c"]={"clang/test/Sema/ext_vector_ops.c:129:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:130:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:131:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:132:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:133:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:134:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:135:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:136:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:146:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:147:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:157:6: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:158:6: error: used type \'float\' where integer is required"} | ["clang/test/Sema/ext_vector_ops.c"]={"clang/test/Sema/ext_vector_ops.c:129:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:130:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:131:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:132:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:133:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:134:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:135:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:136:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:146:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:147:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:157:6: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:158:6: error: used type \'float\' where integer is required"} | ||
Line 8,184: | Line 8,184: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{rb,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // Require the operand to be a scalar, a vector, or a matrix.\n if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{w,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}}, | [k]={{rb,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n // Require the operand to be a scalar, a vector, or a matrix.\n if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{w,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n // ...\n if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n // ...\n S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:11:12: error: operand of type \'struct foo\' where arithmetic or pointer type is required"} | ["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:11:12: error: operand of type \'struct foo\' where arithmetic or pointer type is required"} | ||
Line 8,199: | Line 8,199: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14363,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_ClassTemporary:\n DiagID = diag::err_typecheck_expression_not_modifiable_lvalue;"}} | [k]={{r,14363,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_InvalidExpression:\n case Expr::MLV_MemberFunction:\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 8,211: | Line 8,211: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,18160,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n if (!InvalidDecl && T->isVariablyModifiedType()) {\n if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}}, | [k]={{u,18160,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n // ...\n // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n if (!InvalidDecl && T->isVariablyModifiedType()) {\n if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:17:28: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported","clang/test/Sema/vla.c:74:7: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported"} | ["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:17:28: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported","clang/test/Sema/vla.c:74:7: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported"} | ||
Line 8,226: | Line 8,226: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n } else if (ResType->isRealType()) {\n } else if (ResType->isPointerType()) {\n } else if (ResType->isObjCObjectPointerType()) {\n } else if (ResType->isAnyComplexType()) {\n } else if (ResType->isPlaceholderType()) {\n } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n } else {\n S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}}, | [k]={{r,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n // ...\n if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n // ...\n } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n // ...\n } else if (ResType->isRealType()) {\n // ...\n } else if (ResType->isPointerType()) {\n // ...\n } else if (ResType->isObjCObjectPointerType()) {\n // ...\n } else if (ResType->isAnyComplexType()) {\n // ...\n } else if (ResType->isPlaceholderType()) {\n // ...\n } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n // ...\n } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n // ...\n } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n // ...\n } else {\n S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp:9:14: error: cannot increment value of type \'BoolRef\'"} | ["clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp:9:14: error: cannot increment value of type \'BoolRef\'"} | ||
Line 8,241: | Line 8,241: | ||
[h]=p, | [h]=p, | ||
[e]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of ","Perform the bad-address-space conversions check as part of "}, | [e]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of ","Perform the bad-address-space conversions check as part of "}, | ||
[k]={{rb,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n // Converting the top level pointee addrspace is permitted for compatible\n // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n // if any of the nested pointee addrspaces differ, we emit a warning\n // regardless of addrspace compatibility. This makes\n // local int ** p;\n // return (generic int **) p;\n // warn even though local -> generic is permitted.\n if (Self.getLangOpts().OpenCL) {\n unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{r,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatiblePointerDiscardsQualifiers: {\n if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n DiagKind = diag::err_typecheck_incompatible_address_space;"}}, | [k]={{rb,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n // ...\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 // ...\n unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{r,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerDiscardsQualifiers: {\n // ...\n if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n DiagKind = diag::err_typecheck_incompatible_address_space;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:20:10: error: assigning \'__private int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:21:10: error: assigning \'__local int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:72:15: error: assigning \'__global int *\' to \'__global_host int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:78:17: error: assigning \'__global int *\' to \'__global_device int *\' changes address space of pointer"} | ["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:20:10: error: assigning \'__private int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:21:10: error: assigning \'__local int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:72:15: error: assigning \'__global int *\' to \'__global_host int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:78:17: error: assigning \'__global int *\' to \'__global_device int *\' changes address space of pointer"} | ||
Line 8,256: | Line 8,256: | ||
[h]=p, | [h]=p, | ||
[e]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter.","[Sema][OpenCL] Make address space conversions a bit stricter."}, | [e]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter.","[Sema][OpenCL] Make address space conversions a bit stricter."}, | ||
[k]={{r,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatibleNestedPointerAddressSpaceMismatch:\n DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}}, | [k]={{r,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleNestedPointerAddressSpaceMismatch:\n DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaOpenCL/address-spaces.cl"]={"clang/test/SemaOpenCL/address-spaces.cl:196:8: error: assigning \'__local int *__private *__private\' to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:207:8: error: assigning \'__global int *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:209:8: error: assigning \'__global float *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:215:10: error: assigning \'__local int *__private *__private\' to \'__global float *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:222:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:223:8: error: assigning \'__global int *__private *__private\' to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:226:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__private g_t *\' (aka \'__global int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:227:8: error: assigning \'__private g_t *__private\' (aka \'__global int *__private *__private\') to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer"} | ["clang/test/SemaOpenCL/address-spaces.cl"]={"clang/test/SemaOpenCL/address-spaces.cl:196:8: error: assigning \'__local int *__private *__private\' to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:207:8: error: assigning \'__global int *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:209:8: error: assigning \'__global float *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:215:10: error: assigning \'__local int *__private *__private\' to \'__global float *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:222:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:223:8: error: assigning \'__global int *__private *__private\' to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:226:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__private g_t *\' (aka \'__global int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:227:8: error: assigning \'__private g_t *__private\' (aka \'__global int *__private *__private\') to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer"} | ||
Line 8,271: | Line 8,271: | ||
[h]=p, | [h]=p, | ||
[e]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'."}, | [e]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'."}, | ||
[k]={{rb,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ARC imposes extra restrictions on casts.\n if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{r,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatiblePointerDiscardsQualifiers: {\n if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n DiagKind = diag::err_typecheck_incompatible_ownership;"}}, | [k]={{rb,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n // ARC imposes extra restrictions on casts.\n if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n // ...\n if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n // ...\n if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{r,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerDiscardsQualifiers: {\n // ...\n if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n // ...\n } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n DiagKind = diag::err_typecheck_incompatible_ownership;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:53:7: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:54:14: error: initializing \'__weak id *\' with an expression of type \'id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:65:27: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer"} | ["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:53:7: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:54:14: error: initializing \'__weak id *\' with an expression of type \'id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:65:27: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer"} | ||
Line 8,286: | Line 8,286: | ||
[h]=p, | [h]=p, | ||
[e]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401","Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"}, | [e]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401","Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"}, | ||
[k]={{u,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // Provide a specific diagnostic for uninitialized variable\n // definitions with incomplete array type.\n if (Type->isIncompleteArrayType()) {\n if (Var->isConstexpr())\n else\n Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}}, | [k]={{u,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n // Provide a specific diagnostic for uninitialized variable\n // definitions with incomplete array type.\n if (Type->isIncompleteArrayType()) {\n if (Var->isConstexpr())\n // ...\n else\n Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp:23:5: error: definition of variable with array type needs an explicit size or an initializer"} | ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp:23:5: error: definition of variable with array type needs an explicit size or an initializer"} | ||
Line 8,301: | Line 8,301: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{P,655,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{P,675,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n if (SS.isSet()) {\n if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{P,1361,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{gb,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n/// (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}}, | [k]={{P,655,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n // ...\n if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{P,675,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n // ...\n if (SS.isSet()) {\n // ...\n if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{P,1361,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{gb,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n/// (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n // ...\n if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"} | ["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"} | ||
Line 8,316: | Line 8,316: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14365,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_IncompleteVoidType:\n return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}}, | [k]={{r,14365,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_IncompleteType:\n case Expr::MLV_IncompleteVoidType:\n return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:5:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:7:44: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:9:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:13:17: error: incomplete type \'void\' is not assignable"} | ["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:5:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:7:44: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:9:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:13:17: error: incomplete type \'void\' is not assignable"} | ||
Line 8,331: | Line 8,331: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n if (Result.isNull()) {\n S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}}, | [k]={{r,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n // ...\n if (Result.isNull()) {\n S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"} | ["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"} | ||
Line 8,346: | Line 8,346: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{r,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n if (Result->isVoidType()) {\n if (LO.CPlusPlus)\n S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}}, | [k]={{r,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n // ...\n if (Result->isVoidType()) {\n // ...\n if (LO.CPlusPlus)\n S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:217:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:218:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:219:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:220:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:221:9: error: indirection not permitted on operand of type \'void *\'"} | ["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:217:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:218:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:219:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:220:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:221:9: error: indirection not permitted on operand of type \'void *\'"} | ||
Line 8,361: | Line 8,361: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,15031,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n } else if (isa<ObjCSelectorExpr>(op)) {\n } else if (lval == Expr::LV_MemberFunction) {\n } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n // C99 6.5.3.2p1\n // The operand must be either an l-value or a function designator\n if (!op->getType()->isFunctionType()) {\n // Use a special diagnostic for loads from property references.\n if (isa<PseudoObjectExpr>(op)) {\n } else {\n Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}}, | [k]={{r,15031,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n } else if (lval == Expr::LV_MemberFunction) {\n // ...\n } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n // 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 // ...\n } else {\n Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/property-not-lvalue.m"]={"clang/test/SemaObjC/property-not-lvalue.m:41:20: error: cannot take the address of an rvalue of type \'simd_float2\' (vector of 2 \'float\' values)"} | ["clang/test/SemaObjC/property-not-lvalue.m"]={"clang/test/SemaObjC/property-not-lvalue.m:41:20: error: cannot take the address of an rvalue of type \'simd_float2\' (vector of 2 \'float\' values)"} | ||
Line 8,376: | Line 8,376: | ||
[h]=p, | [h]=p, | ||
[e]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function"}, | [e]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function"}, | ||
[k]={{r,14869,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n if (PTy->getKind() == BuiltinType::Overload) {\n if (!isa<OverloadExpr>(E)) {\n Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}}, | [k]={{r,14869,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n if (PTy->getKind() == BuiltinType::Overload) {\n // ...\n if (!isa<OverloadExpr>(E)) {\n // ...\n Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"} | ["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"} | ||
Line 8,391: | Line 8,391: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n unsigned DiagID = diag::err_typecheck_invalid_operands;"},{r,12111,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // Do not allow shifts for boolean vectors.\n if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{r,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | [k]={{r,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\n Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n unsigned DiagID = diag::err_typecheck_invalid_operands;"},{r,12111,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n // Do not allow shifts for boolean vectors.\n if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{r,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{r,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:12:24: error: invalid operands to binary expression (\'id\' and \'const __strong id\')"} | ["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:12:24: error: invalid operands to binary expression (\'id\' and \'const __strong id\')"} | ||
Line 8,406: | Line 8,406: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{K,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n // object or incomplete types shall not be restrict-qualified.\"\n if (Qs.hasRestrict()) {\n if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n // If we have a pointer or reference, the pointee must have an object\n // incomplete type.\n if (!EltTy->isIncompleteOrObjectType()) {\n DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}}, | [k]={{K,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // ...\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 // ...\n if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n // ...\n // If we have a pointer or reference, the pointee must have an object\n // incomplete type.\n if (!EltTy->isIncompleteOrObjectType()) {\n DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:23:1: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified","clang/test/Sema/declspec.c:24:3: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified"} | ["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:23:1: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified","clang/test/Sema/declspec.c:24:3: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified"} | ||
Line 8,421: | Line 8,421: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{K,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n // object or incomplete types shall not be restrict-qualified.\"\n if (Qs.hasRestrict()) {\n if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n } else if (!isDependentOrGNUAutoType(T)) {\n DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}}, | [k]={{K,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // ...\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 // ...\n if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n // ...\n } else if (!isDependentOrGNUAutoType(T)) {\n // ...\n DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:22:1: error: restrict requires a pointer or reference (\'f\' (aka \'int (void)\') is invalid)"} | ["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:22:1: error: restrict requires a pointer or reference (\'f\' (aka \'int (void)\') is invalid)"} | ||
Line 8,436: | Line 8,436: | ||
[h]=p, | [h]=p, | ||
[e]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a...","implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a FIXME"}, | [e]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a...","implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a FIXME"}, | ||
[k]={{u,5109,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n // or incomplete types shall not be restrict-qualified.\"\n if (TypeQuals & DeclSpec::TQ_restrict)\n Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}}, | [k]={{u,5109,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n // ...\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n // or incomplete types shall not be restrict-qualified.\"\n if (TypeQuals & DeclSpec::TQ_restrict)\n Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:66:10: error: restrict requires a pointer or reference"} | ["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:66:10: error: restrict requires a pointer or reference"} | ||
Line 8,451: | Line 8,451: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,18386,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n }\n // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n else if (T->isVariablyModifiedType()) {\n if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}}, | [k]={{u,18386,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n // ...\n }\n // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n else if (T->isVariablyModifiedType()) {\n if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/variable-size-ivar.m"]={"clang/test/SemaObjC/variable-size-ivar.m:9:7: error: instance variables must have a constant size"} | ["clang/test/SemaObjC/variable-size-ivar.m"]={"clang/test/SemaObjC/variable-size-ivar.m:9:7: error: instance variables must have a constant size"} | ||
Line 8,466: | Line 8,466: | ||
[h]=p, | [h]=p, | ||
[e]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions"}, | [e]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions"}, | ||
[k]={{r,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n if (!(LHSNatVec && RHSNatVec)) {\n Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{r,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | [k]={{r,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\n if (!(LHSNatVec && RHSNatVec)) {\n // ...\n Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{r,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\n Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/vector-ops.c"]={ | ["clang/test/Sema/vector-ops.c"]={ | ||
Line 8,536: | Line 8,536: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14358,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_LValueCast:\n DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}}, | [k]={{r,14358,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_LValueCast:\n DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:33:3: error: assignment to cast is illegal, lvalue casts are not supported"} | ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:33:3: error: assignment to cast is illegal, lvalue casts are not supported"} | ||
Line 8,551: | Line 8,551: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{J,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // C++ [over.match.oper]p8:\n // [...] When operator->returns, the operator-> is applied to the value\n // returned, with the original second operand.\n if (OpKind == tok::arrow) {\n while (BaseType->isRecordType()) {\n if (Result.isInvalid()) {\n if (NoArrowOperatorFound) {\n Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{P,1293,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // For later type-checking purposes, turn arrow accesses into dot\n // accesses. The only access type we support that doesn\'t follow\n // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n // and those never use arrows, so this is unaffected.\n if (IsArrow) {\n if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n else if (BaseType->isRecordType()) {\n } else if (BaseType->isFunctionType()) {\n } else {\n S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{gb,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n/// (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n case OR_No_Viable_Function: {\n if (CandidateSet.empty()) {\n Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}}, | [k]={{J,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n // C++ [over.match.oper]p8:\n // [...] When operator->returns, the operator-> is applied to the value\n // returned, with the original second operand.\n if (OpKind == tok::arrow) {\n // ...\n while (BaseType->isRecordType()) {\n // ...\n if (Result.isInvalid()) {\n if (NoArrowOperatorFound) {\n // ...\n Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{P,1293,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\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 // ...\n else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n // ...\n else if (BaseType->isRecordType()) {\n // ...\n } else if (BaseType->isFunctionType()) {\n // ...\n } else {\n S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{gb,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n/// (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n // ...\n case OR_No_Viable_Function: {\n // ...\n if (CandidateSet.empty()) {\n // ...\n Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"} | ["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"} | ||
Line 8,566: | Line 8,566: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{P,1404,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (!IV) {\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n } else {\n S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}}, | [k]={{P,1404,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (!IV) {\n // ...\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n // ...\n } else {\n // ...\n S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:6:14: error: \'SomeClass\' does not have a member named \'privateIvar\'","clang/test/SemaObjC/ivar-in-class-extension.m:7:21: error: \'SomeClass\' does not have a member named \'publicIvar\'"} | ["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:6:14: error: \'SomeClass\' does not have a member named \'privateIvar\'","clang/test/SemaObjC/ivar-in-class-extension.m:7:21: error: \'SomeClass\' does not have a member named \'publicIvar\'"} | ||
Line 8,581: | Line 8,581: | ||
[h]=p, | [h]=p, | ||
[e]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific"}, | [e]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific"}, | ||
[k]={{P,1378,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (!IV) {\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}}, | [k]={{P,1378,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (!IV) {\n // ...\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n // ...\n S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/typo-correction.m"]={"clang/test/SemaObjC/typo-correction.m:48:15: error: \'I\' does not have a member named \'implementation\'; did you mean \'_implementation\'?","clang/test/SemaObjC/typo-correction.m:49:15: error: \'I\' does not have a member named \'interface\'; did you mean \'_interface\'?","clang/test/SemaObjC/typo-correction.m:50:15: error: \'I\' does not have a member named \'extension\'; did you mean \'_extension\'?"} | ["clang/test/SemaObjC/typo-correction.m"]={"clang/test/SemaObjC/typo-correction.m:48:15: error: \'I\' does not have a member named \'implementation\'; did you mean \'_implementation\'?","clang/test/SemaObjC/typo-correction.m:49:15: error: \'I\' does not have a member named \'interface\'; did you mean \'_interface\'?","clang/test/SemaObjC/typo-correction.m:50:15: error: \'I\' does not have a member named \'extension\'; did you mean \'_extension\'?"} | ||
Line 8,596: | Line 8,596: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{P,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // Even in dependent contexts, try to diagnose base expressions with\n // obviously wrong types, e.g.:\n //\n // T* t;\n // t.f;\n //\n // In Obj-C++, however, the above expression is valid, since it could be\n // accessing the \'f\' property if T is an Obj-C interface. The extra check\n // allows this, while still reporting an error if T is a struct pointer.\n if (!IsArrow) {\n if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{P,1691,"fail:\n S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}}, | [k]={{P,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // Even in dependent contexts, try to diagnose base expressions with\n // obviously wrong types, e.g.:\n //\n // T* t;\n // t.f;\n //\n // In Obj-C++, however, the above expression is valid, since it could be\n // accessing the \'f\' property if T is an Obj-C interface. The extra check\n // allows this, while still reporting an error if T is a struct pointer.\n if (!IsArrow) {\n // ...\n if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n // ...\n Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{P,1691,"fail:\n // ...\n S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:66:24: error: member reference base type \'void *\' is not a structure or union"} | ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:66:24: error: member reference base type \'void *\' is not a structure or union"} | ||
Line 8,611: | Line 8,611: | ||
[h]=p, | [h]=p, | ||
[e]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records.","Recover from dot accesses to record pointers and arrow accesses to records."}, | [e]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records.","Recover from dot accesses to record pointers and arrow accesses to records."}, | ||
[k]={{J,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // C++ [over.match.oper]p8:\n // [...] When operator->returns, the operator-> is applied to the value\n // returned, with the original second operand.\n if (OpKind == tok::arrow) {\n while (BaseType->isRecordType()) {\n if (Result.isInvalid()) {\n if (NoArrowOperatorFound) {\n if (FirstIteration) {\n Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n // C++ [expr.pseudo]p2:\n // The left-hand side of the dot operator shall be of scalar type. The\n // left-hand side of the arrow operator shall be of pointer to scalar type.\n // This scalar type is the object type.\n // Note that this is rather different from the normal handling for the\n // arrow operator.\n if (OpKind == tok::arrow) {\n if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n } else if (!Base->isTypeDependent()) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // C++ [expr.pseudo]p2:\n // [...] The cv-unqualified versions of the object type and of the type\n // designated by the pseudo-destructor-name shall be the same type.\n if (DestructedTypeInfo) {\n if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n // Detect dot pseudo destructor calls on pointer objects, e.g.:\n // Foo *foo;\n // foo.~Foo();\n if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{P,1285,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // For later type-checking purposes, turn arrow accesses into dot\n // accesses. The only access type we support that doesn\'t follow\n // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n // and those never use arrows, so this is unaffected.\n if (IsArrow) {\n if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n else if (BaseType->isRecordType()) {\n // Recover from arrow accesses to records, e.g.:\n // struct MyRecord foo;\n // foo->bar\n // This is actually well-formed in C++ if MyRecord has an\n // overloaded operator->, but that should have been dealt with\n // by now--or a diagnostic message already issued if a problem\n // was encountered while looking for the overloaded operator->.\n if (!S.getLangOpts().CPlusPlus) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{P,1664,"fail:\n // Recover from dot accesses to pointers, e.g.:\n // type *foo;\n // foo.bar\n // This is actually well-formed in two cases:\n // - \'type\' is an Objective C type\n // - \'bar\' is a pseudo-destructor name which happens to refer to\n // the appropriate pointer type\n if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}}, | [k]={{J,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n // C++ [over.match.oper]p8:\n // [...] When operator->returns, the operator-> is applied to the value\n // returned, with the original second operand.\n if (OpKind == tok::arrow) {\n // ...\n while (BaseType->isRecordType()) {\n // ...\n if (Result.isInvalid()) {\n if (NoArrowOperatorFound) {\n if (FirstIteration) {\n Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n // ...\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 // ...\n if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n // ...\n } else if (!Base->isTypeDependent()) {\n // ...\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n // C++ [expr.pseudo]p2:\n // [...] The cv-unqualified versions of the object type and of the type\n // designated by the pseudo-destructor-name shall be the same type.\n if (DestructedTypeInfo) {\n // ...\n if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n // Detect dot pseudo destructor calls on pointer objects, e.g.:\n // Foo *foo;\n // foo.~Foo();\n if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{P,1285,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\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 // ...\n else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n // ...\n else if (BaseType->isRecordType()) {\n // Recover from arrow accesses to records, e.g.:\n // struct MyRecord foo;\n // foo->bar\n // This is actually well-formed in C++ if MyRecord has an\n // overloaded operator->, but that should have been dealt with\n // by now--or a diagnostic message already issued if a problem\n // was encountered while looking for the overloaded operator->.\n if (!S.getLangOpts().CPlusPlus) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{P,1664,"fail:\n // Recover from dot accesses to pointers, e.g.:\n // type *foo;\n // foo.bar\n // This is actually well-formed in two cases:\n // - \'type\' is an Objective C type\n // - \'bar\' is a pseudo-destructor name which happens to refer to\n // the appropriate pointer type\n if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/member-reference.c"]={"clang/test/Sema/member-reference.c:23:11: error: member reference type \'struct simple\' is not a pointer; did you mean to use \'.\'?"} | ["clang/test/Sema/member-reference.c"]={"clang/test/Sema/member-reference.c:23:11: error: member reference type \'struct simple\' is not a pointer; did you mean to use \'.\'?"} | ||
Line 8,626: | Line 8,626: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{P,1176,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}}, | [k]={{P,1176,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n // ...\n // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:16:5: error: cannot refer to type member \'E\' in \'X\' with \'.\'","clang/test/SemaCXX/member-expr.cpp:17:7: error: cannot refer to type member \'E\' in \'X\' with \'->\'"} | ["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:16:5: error: cannot refer to type member \'E\' in \'X\' with \'.\'","clang/test/SemaCXX/member-expr.cpp:17:7: error: cannot refer to type member \'E\' in \'X\' with \'->\'"} | ||
Line 8,641: | Line 8,641: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{P,1179,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n else\n Diag(MemberLoc, diag::err_typecheck_member_reference_unknown) << MemberName << BaseType << int(IsArrow);"}} | [k]={{P,1179,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n // ...\n // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n // ...\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 8,653: | Line 8,653: | ||
[h]=p, | [h]=p, | ||
[e]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is ","If block literal return type is not specified, return type of the block is "}, | [e]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is ","If block literal return type is not specified, return type of the block is "}, | ||
[k]={{cc,704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n // We require the return types to strictly match here.\n // Note that we\'ve already done the required promotions as part of\n // processing the return statement.\n for (const ReturnStmt *RS : CSI.Returns) {\n Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{T,3860,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n {\n case TDK_Inconsistent: {\n if (LambdaSI && LambdaSI->HasImplicitReturnType)\n Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}}, | [k]={{cc,704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n // ...\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 // ...\n Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{T,3860,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n // ...\n {\n // ...\n case TDK_Inconsistent: {\n // ...\n if (LambdaSI && LambdaSI->HasImplicitReturnType)\n Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:22:7: error: return type \'double\' must match previous return type \'float\' when block literal has unspecified explicit return type"} | ["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:22:7: error: return type \'double\' must match previous return type \'float\' when block literal has unspecified explicit return type"} | ||
Line 8,668: | Line 8,668: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n if (SizeIsNegative)\n Diag(Loc, diag::err_typecheck_negative_array_size);"},{u,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n if (T->isVariablyModifiedType()) {\n if (S->getFnParent() == nullptr) {\n if (FixedTInfo) {\n } else {\n if (SizeIsNegative)\n Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{J,2221,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n // We\'ve already performed any required implicit conversion to integer or\n // unscoped enumeration type.\n // FIXME: Per CWG1464, we are required to check the value prior to\n // converting to size_t. This will never find a negative array size in\n // C++14 onwards, because Value is always unsigned here!\n if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n if (Value->isSigned() && Value->isNegative()) {\n return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{K,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (!ArraySize) {\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n } else {\n if (!R.isUsable()) {\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n } else {\n // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n // have a value greater than zero.\n // In C++, this follows from narrowing conversions being disallowed.\n if (ConstVal.isSigned() && ConstVal.isNegative()) {\n if (Entity)\n else\n Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}}, | [k]={{u,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n // ...\n if (SizeIsNegative)\n Diag(Loc, diag::err_typecheck_negative_array_size);"},{u,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n // ...\n if (T->isVariablyModifiedType()) {\n // ...\n if (S->getFnParent() == nullptr) {\n // ...\n if (FixedTInfo) {\n // ...\n } else {\n if (SizeIsNegative)\n Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{J,2221,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n // ...\n if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n // ...\n // We\'ve already performed any required implicit conversion to integer or\n // unscoped enumeration type.\n // FIXME: Per CWG1464, we are required to check the value prior to\n // converting to size_t. This will never find a negative array size in\n // C++14 onwards, because Value is always unsigned here!\n if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n if (Value->isSigned() && Value->isNegative()) {\n return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{K,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n // ...\n if (!ArraySize) {\n // ...\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n // ...\n } else {\n // ...\n if (!R.isUsable()) {\n // ...\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n // ...\n } else {\n // 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 // ...\n else\n Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:76:19: error: array size is negative"} | [Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:76:19: error: array size is negative"} | ||
Line 8,683: | Line 8,683: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,14351,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n case Expr::MLV_NotObjectType:\n DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}}, | [k]={{r,14351,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_NotObjectType:\n DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"} | ["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"} | ||
Line 8,698: | Line 8,698: | ||
[h]=p, | [h]=p, | ||
[e]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of ","Improve on diagnosing type mismatches because of "}, | [e]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of ","Improve on diagnosing type mismatches because of "}, | ||
[k]={{M,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_UserConversionOverloadFailed:\n case OR_No_Viable_Function: {\n if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{gb,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n if (OvResult == OR_Ambiguous)\n else { // OR_No_Viable_Function && !CandidateSet.empty()\n if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}}, | [k]={{M,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_No_Viable_Function: {\n // ...\n if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{gb,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n // ...\n else { // OR_No_Viable_Function && !CandidateSet.empty()\n if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:34: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:37: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: no viable conversion from \'S2\' to \'float\'"} | ["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:34: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:37: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: no viable conversion from \'S2\' to \'float\'"} | ||
Line 8,713: | Line 8,713: | ||
[h]=p, | [h]=p, | ||
[e]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i...","Fix a conversion to incomplete type bug -- The error message now specifically states that the type is incomplete and points to the forward declaration of the incomplete type."}, | [e]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i...","Fix a conversion to incomplete type bug -- The error message now specifically states that the type is incomplete and points to the forward declaration of the incomplete type."}, | ||
[k]={{M,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_UserConversionOverloadFailed:\n case OR_No_Viable_Function: {\n if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{gb,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n if (OvResult == OR_Ambiguous)\n else { // OR_No_Viable_Function && !CandidateSet.empty()\n if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}}, | [k]={{M,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_No_Viable_Function: {\n // ...\n if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{gb,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n // ...\n else { // OR_No_Viable_Function && !CandidateSet.empty()\n if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/conversion-incomplete-type.cpp"]={"clang/test/SemaCXX/conversion-incomplete-type.cpp:12:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'","clang/test/SemaCXX/conversion-incomplete-type.cpp:20:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'"} | ["clang/test/SemaCXX/conversion-incomplete-type.cpp"]={"clang/test/SemaCXX/conversion-incomplete-type.cpp:12:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'","clang/test/SemaCXX/conversion-incomplete-type.cpp:20:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'"} | ||
Line 8,728: | Line 8,728: | ||
[h]=p, | [h]=p, | ||
[e]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.","[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."}, | [e]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.","[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."}, | ||
[k]={{r,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n // spaces is disallowed.\n if (lhQual.isAddressSpaceSupersetOf(rhQual))\n else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n else {\n S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n // if both are pointers check if operation is valid wrt address spaces\n if (isLHSPointer && isRHSPointer) {\n if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{r,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n } else if (getLangOpts().CPlusPlus) {\n } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n if (LCanPointeeTy != RCanPointeeTy) {\n // Treat NULL constant as a special case in OpenCL.\n if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}}, | [k]={{r,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n // ...\n // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n // spaces is disallowed.\n if (lhQual.isAddressSpaceSupersetOf(rhQual))\n // ...\n else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n // ...\n else {\n S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n // ...\n // if both are pointers check if operation is valid wrt address spaces\n if (isLHSPointer && isRHSPointer) {\n if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{r,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n // ...\n if (LCanPointeeTy != RCanPointeeTy) {\n // Treat NULL constant as a special case in OpenCL.\n if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/address-space-arithmetic.cpp"]={"clang/test/SemaCXX/address-space-arithmetic.cpp:5:12: error: arithmetic operation with operands of type (\'__private int *\' and \'__local int *\') which are pointers to non-overlapping address spaces"} | ["clang/test/SemaCXX/address-space-arithmetic.cpp"]={"clang/test/SemaCXX/address-space-arithmetic.cpp:5:12: error: arithmetic operation with operands of type (\'__private int *\' and \'__local int *\') which are pointers to non-overlapping address spaces"} | ||
Line 8,743: | Line 8,743: | ||
[h]=p, | [h]=p, | ||
[e]={ac,1615397021,hb,hb}, | [e]={ac,1615397021,hb,hb}, | ||
[k]={{r,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}}, | [k]={{r,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n // ...\n auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:15:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\')","clang/test/SemaCXX/compare-function-pointer.cpp:27:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"} | ["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:15:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\')","clang/test/SemaCXX/compare-function-pointer.cpp:27:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"} | ||
Line 8,758: | Line 8,758: | ||
[h]=p, | [h]=p, | ||
[e]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.","DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."}, | [e]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.","DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."}, | ||
[k]={{r,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n if (LangOpts.DebuggerSupport) {\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n if (IsOrdered) {\n DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}}, | [k]={{r,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n if (IsOrdered) {\n // ...\n DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:25: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:36: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:51: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:26: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:38: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:54: error: ordered comparison between pointer and zero (\'long\' and \'int *\')"} | ["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:25: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:36: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:51: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:26: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:38: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:54: error: ordered comparison between pointer and zero (\'long\' and \'int *\')"} | ||
Line 8,773: | Line 8,773: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{r,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}}, | [k]={{r,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n // ...\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{r,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n // ...\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:16: error: arithmetic on a pointer to the function type \'void ()\'","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:24: error: arithmetic on a pointer to the function type \'void ()\'"} | ["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:16: error: arithmetic on a pointer to the function type \'void ()\'","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:24: error: arithmetic on a pointer to the function type \'void ()\'"} | ||
Line 8,803: | Line 8,803: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!DC->isRecord() && S->getFnParent() == nullptr) {\n // C99 6.9p2: The storage-class specifiers auto and register shall not\n // appear in the declaration specifiers in an external declaration.\n // Global Register+Asm is a GNU extension we support.\n if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}}, | [k]={{u,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!DC->isRecord() && S->getFnParent() == nullptr) {\n // C99 6.9p2: The storage-class specifiers auto and register shall not\n // appear in the declaration specifiers in an external declaration.\n // Global Register+Asm is a GNU extension we support.\n if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:26:14: error: illegal storage class on file-scoped variable"} | ["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:26:14: error: illegal storage class on file-scoped variable"} | ||
Line 8,818: | Line 8,818: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{u,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n case DeclSpec::SCS_mutable:\n SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}}, | [k]={{u,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n // ...\n case DeclSpec::SCS_auto:\n case DeclSpec::SCS_register:\n case DeclSpec::SCS_mutable:\n SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:59:3: error: illegal storage class on function"} | ["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:59:3: error: illegal storage class on function"} | ||
Line 8,833: | Line 8,833: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{T,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}}, | [k]={{T,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/non-integral-switch-cond.cpp"]={"clang/test/SemaTemplate/non-integral-switch-cond.cpp:9:5: error: statement requires expression of integer type (\'NOT_AN_INTEGRAL_TYPE\' invalid)"} | ["clang/test/SemaTemplate/non-integral-switch-cond.cpp"]={"clang/test/SemaTemplate/non-integral-switch-cond.cpp:9:5: error: statement requires expression of integer type (\'NOT_AN_INTEGRAL_TYPE\' invalid)"} | ||
Line 8,848: | Line 8,848: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n if (!E->isTypeDependent()) {\n if (!T->isScalarType()) { // C99 6.8.4.1p1\n Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}}, | [k]={{r,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n // ...\n if (!E->isTypeDependent()) {\n // ...\n if (!T->isScalarType()) { // C99 6.8.4.1p1\n Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:43:3: error: statement requires expression of scalar type (\'enum some_undefined_enum\' invalid)"} | ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:43:3: error: statement requires expression of scalar type (\'enum some_undefined_enum\' invalid)"} | ||
Line 8,863: | Line 8,863: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{w,9078,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n // Ensure Pointee types are compatible\n if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{r,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}}, | [k]={{w,9078,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n // ...\n // Ensure Pointee types are compatible\n if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n // ...\n if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{r,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n // ...\n S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/CXX/over/over.built/p15.cpp"]={"clang/test/CXX/over/over.built/p15.cpp:6:13: error: \'int *\' and \'float *\' are not pointers to compatible types"} | ["clang/test/CXX/over/over.built/p15.cpp"]={"clang/test/CXX/over/over.built/p15.cpp:6:13: error: \'int *\' and \'float *\' are not pointers to compatible types"} | ||
Line 8,878: | Line 8,878: | ||
[h]=p, | [h]=p, | ||
[e]={"003af249275a",1240699855,"minor diagnostics improvements.","minor diagnostics improvements."}, | [e]={"003af249275a",1240699855,"minor diagnostics improvements.","minor diagnostics improvements."}, | ||
[k]={{r,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // C99 6.5.2.1p1\n if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{r,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n for (const OffsetOfComponent &OC : Components) {\n if (OC.isBrackets) {\n // The expression must be an integral expression.\n // FIXME: An integral constant expression?\n if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}}, | [k]={{r,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n // C99 6.5.2.1p1\n if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{r,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n // ...\n for (const OffsetOfComponent &OC : Components) {\n if (OC.isBrackets) {\n // ...\n // The expression must be an integral expression.\n // FIXME: An integral constant expression?\n if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"} | ["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"} | ||
Line 8,893: | Line 8,893: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n } else if (LHSTy->isArrayType()) {\n } else if (RHSTy->isArrayType()) {\n } else {\n return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}, | [k]={{r,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n // ...\n } else if (LHSTy->isArrayType()) {\n // ...\n } else if (RHSTy->isArrayType()) {\n // ...\n } else {\n return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:20:17: error: subscripted value is not an array, pointer, or vector"} | ["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:20:17: error: subscripted value is not an array, pointer, or vector"} | ||
Line 8,908: | Line 8,908: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{r,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}}, | [k]={{r,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:131:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:132:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:141:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:144:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:150:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:153:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:159:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:162:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:168:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:171:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))"} | ["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:131:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:132:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:141:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:144:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:150:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:153:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:159:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:162:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:168:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:171:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))"} | ||
Line 8,923: | Line 8,923: | ||
[h]=p, | [h]=p, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{r,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}}, | [k]={{r,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:134:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:135:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:137:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:138:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:142:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:145:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:147:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:148:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:151:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:154:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:156:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:157:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:160:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:163:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:165:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:166:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:169:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:172:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:174:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:175:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))"} | ["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:134:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:135:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:137:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:138:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:142:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:145:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:147:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:148:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:151:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:154:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:156:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:157:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:160:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:163:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:165:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:166:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:169:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:172:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:174:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:175:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))"} | ||
Line 8,938: | Line 8,938: | ||
[h]=p, | [h]=p, | ||
[e]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles."}, | [e]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles."}, | ||
[k]={{r,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n auto computeResultTy = [&]() {\n if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n Diag(Loc, diag::err_typecheck_three_way_comparison_of_pointer_and_zero) << (LHSIsNull ? LHS.get()->getSourceRange() : RHS.get()->getSourceRange());"}} | [k]={{r,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n auto computeResultTy = [&]() {\n // ...\n if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n // ...\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 8,950: | Line 8,950: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{r,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n if (getLangOpts().OpenCL) {\n // The only legal unary operation for atomics is \'&\'.\n if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{r,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_Minus:\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_Not: // bitwise complement\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n else if (resultType->hasIntegerRepresentation())\n else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n if (!T->isIntegerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_Not: // bitwise complement\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n else if (resultType->hasIntegerRepresentation())\n else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n } else {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_LNot: // logical negation\n // WebAsembly tables can\'t be used in unary expressions.\n if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_LNot: // logical negation\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // C99 6.5.3.3p1: ok, fallthrough;\n if (Context.getLangOpts().CPlusPlus) {\n } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n // operate on scalar float types.\n if (!resultType->isIntegerType() && !resultType->isPointerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_LNot: // logical negation\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n } else if (resultType->isExtVectorType()) {\n if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n if (!T->isIntegerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_LNot: // logical negation\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n } else if (resultType->isExtVectorType()) {\n } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n if (VTy->getVectorKind() != VectorType::GenericVector)\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_LNot: // logical negation\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n } else if (resultType->isExtVectorType()) {\n } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n } else {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}}, | [k]={{r,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n if (getLangOpts().OpenCL) {\n // ...\n // The only legal unary operation for atomics is \'&\'.\n if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n // ...\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{r,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Plus:\n case UO_Minus:\n // ...\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Not: // bitwise complement\n // ...\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n // ...\n else if (resultType->hasIntegerRepresentation())\n // ...\n else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n // ...\n if (!T->isIntegerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Not: // bitwise complement\n // ...\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n // ...\n else if (resultType->hasIntegerRepresentation())\n // ...\n else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n // ...\n } else {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n // WebAsembly tables can\'t be used in unary expressions.\n if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // C99 6.5.3.3p1: ok, fallthrough;\n if (Context.getLangOpts().CPlusPlus) {\n // ...\n } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n // operate on scalar float types.\n if (!resultType->isIntegerType() && !resultType->isPointerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // ...\n } else if (resultType->isExtVectorType()) {\n if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n // ...\n if (!T->isIntegerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // ...\n } else if (resultType->isExtVectorType()) {\n // ...\n } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n // ...\n if (VTy->getVectorKind() != VectorType::GenericVector)\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{r,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // ...\n } else if (resultType->isExtVectorType()) {\n // ...\n } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n // ...\n } else {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:13:10: error: invalid argument type \'v2f\' (vector of 2 \'float\' values) to unary expression"} | ["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:13:10: error: invalid argument type \'v2f\' (vector of 2 \'float\' values) to unary expression"} | ||
Line 8,965: | Line 8,965: | ||
[h]=p, | [h]=p, | ||
[e]={"c65605d008dd",1423201495,Db,Db}, | [e]={"c65605d008dd",1423201495,Db,Db}, | ||
[k]={{r,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,12149,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (!LHSVecTy) {\n } else if (RHSVecTy) {\n // OpenCL v1.1 s6.3.j says that for vector types, the operators\n // are applied component-wise. So if RHS is a vector, then ensure\n // that the number of elements is the same as LHS...\n if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (!LHSType->isVLSTBuiltinType()) {\n } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | [k]={{r,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,12149,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!LHSVecTy) {\n // ...\n } else if (RHSVecTy) {\n // OpenCL v1.1 s6.3.j says that for vector types, the operators\n // are applied component-wise. So if RHS is a vector, then ensure\n // that the number of elements is the same as LHS...\n if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!LHSType->isVLSTBuiltinType()) {\n // ...\n } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:82:11: error: vector operands do not have the same number of elements (\'vec16\' (vector of 4 \'unsigned int\' values) and \'vec8\' (vector of 2 \'unsigned int\' values))"} | ["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:82:11: error: vector operands do not have the same number of elements (\'vec16\' (vector of 4 \'unsigned int\' values) and \'vec8\' (vector of 2 \'unsigned int\' values))"} | ||
Line 8,980: | Line 8,980: | ||
[h]=p, | [h]=p, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{r,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}}, | [k]={{r,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:25:10: error: cannot convert between vector values of different size (\'float3\' (vector of 3 \'float\' values) and \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/ext_vector_casts.c:26:10: error: cannot convert between vector values of different size (\'float4\' (vector of 4 \'float\' values) and \'float3\' (vector of 3 \'float\' values))","clang/test/Sema/ext_vector_casts.c:49:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/ext_vector_casts.c:107:11: error: cannot convert between vector values of different size (\'short8\' (vector of 8 \'short\' values) and \'float\')","clang/test/Sema/ext_vector_casts.c:111:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'double\')"} | ["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:25:10: error: cannot convert between vector values of different size (\'float3\' (vector of 3 \'float\' values) and \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/ext_vector_casts.c:26:10: error: cannot convert between vector values of different size (\'float4\' (vector of 4 \'float\' values) and \'float3\' (vector of 3 \'float\' values))","clang/test/Sema/ext_vector_casts.c:49:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/ext_vector_casts.c:107:11: error: cannot convert between vector values of different size (\'short8\' (vector of 8 \'short\' values) and \'float\')","clang/test/Sema/ext_vector_casts.c:111:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'double\')"} | ||
Line 8,995: | Line 8,995: | ||
[h]=p, | [h]=p, | ||
[e]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions"}, | [e]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions"}, | ||
[k]={{r,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // If there is a vector type that is not a ExtVector and a scalar, we reach\n // this point if scalar could not be converted to the vector\'s element type\n // without truncation.\n if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{r,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}}, | [k]={{r,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\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 // ...\n Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{r,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n // ...\n Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/vector-no-lax.cpp"]={"clang/test/SemaCXX/vector-no-lax.cpp:7:5: error: cannot convert between vector type \'vUInt32\' (vector of 4 \'unsigned int\' values) and vector type \'vSInt32\' (vector of 4 \'int\' values) as implicit conversion would cause truncation"} | ["clang/test/SemaCXX/vector-no-lax.cpp"]={"clang/test/SemaCXX/vector-no-lax.cpp:7:5: error: cannot convert between vector type \'vUInt32\' (vector of 4 \'unsigned int\' values) and vector type \'vSInt32\' (vector of 4 \'int\' values) as implicit conversion would cause truncation"} | ||
Line 9,010: | Line 9,010: | ||
[h]=p, | [h]=p, | ||
[e]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types","For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"}, | [e]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types","For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"}, | ||
[k]={{r,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // If there\'s a non-vector, non-real operand, diagnose that.\n if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | [k]={{r,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n // If there\'s a non-vector, non-real operand, diagnose that.\n if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{r,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:62:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')","clang/test/SemaCXX/vector-casts.cpp:65:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')"} | ["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:62:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')","clang/test/SemaCXX/vector-casts.cpp:65:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')"} | ||
Line 9,025: | Line 9,025: | ||
[h]=a, | [h]=a, | ||
[e]={R,1625925174,B,B}, | [e]={R,1625925174,B,B}, | ||
[k]={{u,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // WebAssembly tables must be static with a zero length and can\'t be\n // declared within functions.\n if (T->isWebAssemblyTableType()) {\n if (!ATy || ATy->getSize().getSExtValue() != 0) {\n Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}}, | [k]={{u,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // WebAssembly tables must be static with a zero length and can\'t be\n // declared within functions.\n if (T->isWebAssemblyTableType()) {\n // ...\n if (!ATy || ATy->getSize().getSExtValue() != 0) {\n Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}}, | ||
[o]={ | [o]={ | ||
["clang/test/Sema/wasm-refs-and-tables.c"]={"clang/test/Sema/wasm-refs-and-tables.c:15:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:16:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:17:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:24:22: error: only zero-length WebAssembly tables are currently supported"} | ["clang/test/Sema/wasm-refs-and-tables.c"]={"clang/test/Sema/wasm-refs-and-tables.c:15:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:16:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:17:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:24:22: error: only zero-length WebAssembly tables are currently supported"} | ||
Line 9,040: | Line 9,040: | ||
[h]=p, | [h]=p, | ||
[e]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,","After performing template argument deduction for a function template,"}, | [e]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,","After performing template argument deduction for a function template,"}, | ||
[k]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n if (isZeroSizedArray(*this, TypeToCheck)) {\n SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{K,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (!ArraySize) {\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n } else {\n if (!R.isUsable()) {\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n } else {\n if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}}, | [k]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n // ...\n auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n // ...\n if (isZeroSizedArray(*this, TypeToCheck)) {\n SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{K,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n // ...\n if (!ArraySize) {\n // ...\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n // ...\n } else {\n // ...\n if (!R.isUsable()) {\n // ...\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n // ...\n } else {\n // ...\n if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n // ...\n Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaSYCL/zero-length-arrays.cpp"]={S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,"clang/test/SemaSYCL/zero-length-arrays.cpp:69:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:70:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:14: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:16: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code"} | ["clang/test/SemaSYCL/zero-length-arrays.cpp"]={S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,"clang/test/SemaSYCL/zero-length-arrays.cpp:69:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:70:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:14: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:16: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code"} | ||
Line 9,055: | Line 9,055: | ||
[h]=p, | [h]=p, | ||
[e]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change","Diagnose typedef names for linkage purposes that would change"}, | [e]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change","Diagnose typedef names for linkage purposes that would change"}, | ||
[k]={{u,5015,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n if (NonCLike || ChangesLinkage) {\n if (ChangesLinkage) {\n // If the linkage changes, we can\'t accept this as an extension.\n if (NonCLike.Kind == NonCLikeKind::None)\n DiagID = diag::err_typedef_changes_linkage;"}}, | [k]={{u,5015,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n // ...\n if (NonCLike || ChangesLinkage) {\n // ...\n if (ChangesLinkage) {\n // If the linkage changes, we can\'t accept this as an extension.\n if (NonCLike.Kind == NonCLikeKind::None)\n DiagID = diag::err_typedef_changes_linkage;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/anonymous-struct.cpp"]={"clang/test/SemaCXX/anonymous-struct.cpp:115:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition","clang/test/SemaCXX/anonymous-struct.cpp:131:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"} | ["clang/test/SemaCXX/anonymous-struct.cpp"]={"clang/test/SemaCXX/anonymous-struct.cpp:115:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition","clang/test/SemaCXX/anonymous-struct.cpp:131:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"} | ||
Line 9,070: | Line 9,070: | ||
[h]=p, | [h]=p, | ||
[e]={t,1237025389,q,q}, | [e]={t,1237025389,q,q}, | ||
[k]={{A,3630,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n if (isInstField) {\n } else {\n // Non-instance-fields can\'t have a bitfield.\n if (BitWidth) {\n if (Member->isInvalidDecl()) {\n } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n } else if (isa<TypedefDecl>(Member)) {\n Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}}, | [k]={{A,3630,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n // ...\n if (isInstField) {\n // ...\n } else {\n // ...\n // Non-instance-fields can\'t have a bitfield.\n if (BitWidth) {\n if (Member->isInvalidDecl()) {\n // ...\n } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n // ...\n } else if (isa<TypedefDecl>(Member)) {\n // ...\n Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"} | ["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"} | ||
Line 9,085: | Line 9,085: | ||
[h]=p, | [h]=p, | ||
[e]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462","Diagnose typedef of an operator name. Fixes PR7462"}, | [e]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462","Diagnose typedef of an operator name. Fixes PR7462"}, | ||
[k]={{u,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n else\n Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}}, | [k]={{u,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n // ...\n if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n // ...\n else\n Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:54:15: error: typedef name must be an identifier"} | ["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:54:15: error: typedef name must be an identifier"} | ||
Line 9,100: | Line 9,100: | ||
[h]=v, | [h]=v, | ||
[e]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,","Diagnose attempts to use \'using typename\' with a non-identifier name,"}, | [e]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,","Diagnose attempts to use \'using typename\' with a non-identifier name,"}, | ||
[k]={{jb,830,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n while (true) {\n if (InvalidDeclarator)\n else {\n // \"typename\" keyword is allowed for identifiers only,\n // because it may be a type definition.\n if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}}, | [k]={{jb,830,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\n while (true) {\n // ...\n if (InvalidDeclarator)\n // ...\n else {\n // \"typename\" keyword is allowed for identifiers only,\n // because it may be a type definition.\n if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"} | ["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"} | ||
Line 9,115: | Line 9,115: | ||
[h]=v, | [h]=v, | ||
[e]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be","Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"}, | [e]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be","Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"}, | ||
[k]={{Y,2688,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove constexpr specifier if present.\n if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}}, | [k]={{Y,2688,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove constexpr specifier if present.\n if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}}, | ||
[o]={ | [o]={ | ||
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:20:13: error: type name does not allow constexpr specifier to be specified"} | [Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:20:13: error: type name does not allow constexpr specifier to be specified"} | ||
Line 9,130: | Line 9,130: | ||
[h]=v, | [h]=v, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{Y,2676,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n if (DS.isInlineSpecified())\n Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2678,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n if (DS.isVirtualSpecified())\n Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2680,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n if (DS.hasExplicitSpecifier())\n Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2682,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n if (DS.isNoreturnSpecified())\n Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}}, | [k]={{Y,2676,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n if (DS.isInlineSpecified())\n Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2678,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n // ...\n if (DS.isVirtualSpecified())\n Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2680,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n // ...\n if (DS.hasExplicitSpecifier())\n Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{Y,2682,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n // ...\n if (DS.isNoreturnSpecified())\n Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}}, | ||
[o]={ | [o]={ | ||
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:14:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:15:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:16:13: error: type name does not allow function specifier to be specified"} | [Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:14:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:15:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:16:13: error: type name does not allow function specifier to be specified"} | ||
Line 9,145: | Line 9,145: | ||
[h]=v, | [h]=v, | ||
[e]={F,1236199783,E,D}, | [e]={F,1236199783,E,D}, | ||
[k]={{Y,2666,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove storage class if present.\n if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n if (DS.getStorageClassSpecLoc().isValid())\n Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{Y,2669,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // Issue diagnostic and remove storage class if present.\n if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n if (DS.getStorageClassSpecLoc().isValid())\n else\n Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}}, | [k]={{Y,2666,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove storage class if present.\n if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n if (DS.getStorageClassSpecLoc().isValid())\n Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{Y,2669,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove storage class if present.\n if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n if (DS.getStorageClassSpecLoc().isValid())\n // ...\n else\n Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}}, | ||
[o]={ | [o]={ | ||
[Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:19:13: error: type name does not allow storage class to be specified"} | [Xb]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:19:13: error: type name does not allow storage class to be specified"} | ||
Line 9,160: | Line 9,160: | ||
[h]=p, | [h]=p, | ||
[e]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an","Improve diagnostics when the parser encounters a declarator with an"}, | [e]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an","Improve diagnostics when the parser encounters a declarator with an"}, | ||
[k]={{u,819,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n else if (DeclContext *DC = computeDeclContext(*SS, false))\n else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n } else if (isDependentScopeSpecifier(*SS)) {\n unsigned DiagID = diag::err_typename_missing;"},{r,2878,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n unsigned DiagID = diag::err_typename_missing;"}}, | [k]={{u,819,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n // ...\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n // ...\n else if (DeclContext *DC = computeDeclContext(*SS, false))\n // ...\n else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n // ...\n } else if (isDependentScopeSpecifier(*SS)) {\n unsigned DiagID = diag::err_typename_missing;"},{r,2878,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n // ...\n if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n // ...\n unsigned DiagID = diag::err_typename_missing;"}}, | ||
[o]={ | [o]={ | ||
["clang/test/SemaCXX/PR11358.cpp"]={"clang/test/SemaCXX/PR11358.cpp:15:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'","clang/test/SemaCXX/PR11358.cpp:31:10: error: missing \'typename\' prior to dependent type name \'hash_map<KeyType, ValueType>::const_iterator\'","clang/test/SemaCXX/PR11358.cpp:47:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'"} | ["clang/test/SemaCXX/PR11358.cpp"]={"clang/test/SemaCXX/PR11358.cpp:15:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'","clang/test/SemaCXX/PR11358.cpp:31:10: error: missing \'typename\' prior to dependent type name \'hash_map<KeyType, ValueType>::const_iterator\'","clang/test/SemaCXX/PR11358.cpp:47:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'"} |
edits