Module:ClangDiags/DiagsLongData4: Difference between revisions

Jump to navigation Jump to search
no edit summary
(Created page with "local a=""; local b="regex2"; local c="commit"; local d="prefix"; local e="type"; local f="message"; local g="regex1"; local h="regex3"; local i="title"; local j="category"; local k="source"; local l="error: "; local m="Error"; local n="(?:error|fatal error)\\: "; local o="Semantic Issue"; local p="clang/lib/Sema/SemaExpr.cpp"; local q="clang/lib/Sema/SemaTemplate.cpp"; local r="5a8987ca5113"; local s="Update tablegen diagnostic files to be in sync with the def files.";...")
 
No edit summary
Line 90: Line 90:
[j]=x,
[j]=x,
[c]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble"},
[c]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble"},
[k]={{C,2154,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // 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]={{C,2371,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Check for circular inclusion of the main file.\n  // We can\'t generate a consistent preamble with regard to the conditional\n  // stack if the main file is included again as due to the preamble bounds\n  // some directives (e.g. #endif of a header guard) will never be seen.\n  // Since this will lead to confusing errors, avoid the inclusion.\n  if (Action == Enter && File && PreambleConditionalStack.isRecording() && SourceMgr.isMainFile(File->getFileEntry())) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble);"}}
},
},
["err_pp_invalid_directive"]={
["err_pp_invalid_directive"]={
Line 102: Line 102:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1212,"/// 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]={{C,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  Diag(Result, diag::err_pp_invalid_directive) << 0;"}}
},
},
["err_pp_invalid_poison"]={
["err_pp_invalid_poison"]={
Line 114: Line 114:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{J,446,"/// 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]={{J,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  while (true) {\n    // Can only poison identifiers.\n    if (Tok.isNot(tok::raw_identifier)) {\n      Diag(Tok, diag::err_pp_invalid_poison);"}}
},
},
["err_pp_invalid_tok_in_arg_list"]={
["err_pp_invalid_tok_in_arg_list"]={
Line 126: Line 126:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,2462,"/// 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]={{C,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    default:\n      if (!II) {\n        Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}}
},
},
["err_pp_invalid_udl"]={
["err_pp_invalid_udl"]={
Line 138: Line 138:
[j]=x,
[j]=x,
[c]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and"},
[c]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and"},
[k]={{"clang/lib/Lex/PPExpressions.cpp",298,"/// 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",354,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::utf32_char_constant: { // U\'x\'\n    // Complain about, and drop, any ud-suffix.\n    if (PeekTok.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::numeric_constant: {\n    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"clang/lib/Lex/PPExpressions.cpp",380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  case tok::utf32_char_constant: { // U\'x\'\n    // Complain about, and drop, any ud-suffix.\n    if (PeekTok.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}}
},
},
["err_pp_line_digit_sequence"]={
["err_pp_line_digit_sequence"]={
Line 150: Line 150:
[j]=x,
[j]=x,
[c]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted"},
[c]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted"},
[k]={{C,1250,"/// 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]={{C,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n  for (unsigned i = 0; i != ActualLength; ++i) {\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}}
},
},
["err_pp_line_invalid_filename"]={
["err_pp_line_invalid_filename"]={
Line 162: Line 162:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1310,"/// 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]={{C,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_line_invalid_filename);"}}
},
},
["err_pp_line_requires_integer"]={
["err_pp_line_requires_integer"]={
Line 174: Line 174:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1285,"/// 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]={{C,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}}
},
},
["err_pp_linemarker_invalid_filename"]={
["err_pp_linemarker_invalid_filename"]={
Line 186: Line 186:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1326,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{C,1458,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{C,1474,"/// 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]={{C,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{C,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{C,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  } else if (StrTok.isNot(tok::string_literal)) {\n  } else if (StrTok.hasUDSuffix()) {\n  } else {\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}}
},
},
["err_pp_linemarker_invalid_flag"]={
["err_pp_linemarker_invalid_flag"]={
Line 198: Line 198:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1358,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1367,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (FlagVal == 1) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1392,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1398,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{C,1408,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1413,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{C,1425,"/// 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]={{C,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (FlagVal == 1) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{C,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{C,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{C,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}}
},
},
["err_pp_linemarker_invalid_pop"]={
["err_pp_linemarker_invalid_pop"]={
Line 210: Line 210:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1384,"/// 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]={{C,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  if (FlagVal == 1) {\n  } else if (FlagVal == 2) {\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}}
},
},
["err_pp_linemarker_requires_integer"]={
["err_pp_linemarker_requires_integer"]={
Line 222: Line 222:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1441,"/// 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]={{C,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
},
},
["err_pp_macro_not_identifier"]={
["err_pp_macro_not_identifier"]={
Line 234: Line 234:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,281,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}}
[k]={{C,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}}
},
},
["err_pp_malformed_ident"]={
["err_pp_malformed_ident"]={
Line 246: Line 246:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,1541,"/// 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]={{C,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // If the token kind isn\'t a string, it\'s a malformed directive.\n  if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n    Diag(StrTok, diag::err_pp_malformed_ident);"}}
},
},
["err_pp_missing_lparen_in_vaopt_use"]={
["err_pp_missing_lparen_in_vaopt_use"]={
Line 258: Line 258:
[j]=x,
[j]=x,
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[k]={{C,2666,"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]={{C,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        if (VAOCtx.isVAOptToken(Tok)) {\n          if (Tok.isNot(tok::l_paren)) {\n            Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}}
},
},
["err_pp_missing_macro_name"]={
["err_pp_missing_macro_name"]={
Line 270: Line 270:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,277,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // Missing macro name?\n  if (MacroNameTok.is(tok::eod))\n    return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}}
[k]={{C,325,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // Missing macro name?\n  if (MacroNameTok.is(tok::eod))\n    return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}}
},
},
["err_pp_missing_rparen_in_macro_def"]={
["err_pp_missing_rparen_in_macro_def"]={
Line 282: Line 282:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,2445,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{C,2454,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{C,2495,"/// 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]={{C,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{C,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{C,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    default:\n      case tok::ellipsis: // #define X(A... -> GCC extension\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
},
},
["err_pp_module_begin_no_module_map"]={
["err_pp_module_begin_no_module_map"]={
Line 294: Line 294:
[j]=x,
[j]=x,
[c]={wb,1493857794,xb},
[c]={wb,1493857794,xb},
[k]={{J,1633,"/// 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]={{J,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (!M) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}}
},
},
["err_pp_module_begin_no_submodule"]={
["err_pp_module_begin_no_submodule"]={
Line 306: Line 306:
[j]=x,
[j]=x,
[c]={wb,1493857794,xb},
[c]={wb,1493857794,xb},
[k]={{J,1639,"/// 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]={{J,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    for (unsigned I = 1; I != ModuleName.size(); ++I) {\n      if (!NewM) {\n        PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}}
},
},
["err_pp_module_begin_without_module_end"]={
["err_pp_module_begin_without_module_end"]={
Line 318: Line 318:
[j]=x,
[j]=x,
[c]={wb,1493857794,xb},
[c]={wb,1493857794,xb},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",306,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}}
[k]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}}
},
},
["err_pp_module_begin_wrong_module"]={
["err_pp_module_begin_wrong_module"]={
Line 330: Line 330:
[j]=x,
[j]=x,
[c]={wb,1493857794,xb},
[c]={wb,1493857794,xb},
[k]={{J,1624,"/// 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]={{J,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (ModuleName.front().first->getName() != Current) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}}
},
},
["err_pp_module_build_missing_end"]={
["err_pp_module_build_missing_end"]={
Line 342: Line 342:
[j]=x,
[j]=x,
[c]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build"},
[c]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build"},
[k]={{J,801,"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]={{J,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  while (true) {\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}}
},
},
["err_pp_module_end_without_module_begin"]={
["err_pp_module_end_without_module_begin"]={
Line 354: Line 354:
[j]=x,
[j]=x,
[c]={wb,1493857794,xb},
[c]={wb,1493857794,xb},
[k]={{J,1672,"/// 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]={{J,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (M)\n    else\n      PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}}
},
},
["err_pp_nested_paren"]={
["err_pp_nested_paren"]={
Line 366: Line 366:
[j]=x,
[j]=x,
[c]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros"},
[c]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros"},
[k]={{jb,1247,"/// 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]={{jb,1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::l_paren:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}}
},
},
["err_pp_operator_used_as_macro_name"]={
["err_pp_operator_used_as_macro_name"]={
Line 378: Line 378:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,286,"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]={{C,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  if (II->isCPlusPlusOperatorKeyword()) {\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}}
},
},
["err_pp_pragma_hdrstop_not_seen"]={
["err_pp_pragma_hdrstop_not_seen"]={
Line 390: Line 390:
[j]=x,
[j]=x,
[c]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"},
[c]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"},
[k]={{"clang/lib/Lex/Preprocessor.cpp",596,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
[k]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
},
},
["err_pp_pragma_unsafe_buffer_usage_syntax"]={
["err_pp_pragma_unsafe_buffer_usage_syntax"]={
Line 402: Line 402:
[j]=x,
[j]=x,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{J,1180,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{J,1194,"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]={{J,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{J,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (II->isStr(\"begin\")) {\n    } else if (II->isStr(\"end\")) {\n    } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}}
},
},
["err_pp_remainder_by_zero"]={
["err_pp_remainder_by_zero"]={
Line 414: Line 414:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{"clang/lib/Lex/PPExpressions.cpp",688,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  while (true) {\n    case tok::percent:\n      if (RHS.Val != 0)\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  while (true) {\n    case tok::percent:\n      if (RHS.Val != 0)\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
},
},
["err_pp_stringize_not_parameter"]={
["err_pp_stringize_not_parameter"]={
Line 426: Line 426:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{C,2745,"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]={{C,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      // Check for a valid macro arg identifier or __VA_OPT__.\n      if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n        // If this is assembler-with-cpp mode, we accept random gibberish after\n        // the \'#\' because \'#\' is often a comment character.  However, change\n        // the kind of the token to tok::unknown so that the preprocessor isn\'t\n        // confused.\n        if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n        } else {\n          Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}}
},
},
["err_pp_through_header_not_found"]={
["err_pp_through_header_not_found"]={
Line 438: Line 438:
[j]=x,
[j]=x,
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[k]={{"clang/lib/Lex/Preprocessor.cpp",525,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n  if (!PPOpts->PCHThroughHeader.empty()) {\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
[k]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n  if (!PPOpts->PCHThroughHeader.empty()) {\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
},
},
["err_pp_through_header_not_seen"]={
["err_pp_through_header_not_seen"]={
Line 450: Line 450:
[j]=x,
[j]=x,
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",488,"/// 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",594,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
[k]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n    Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
},
},
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
Line 462: Line 462:
[j]=x,
[j]=x,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",300,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}}
[k]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}}
},
},
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
Line 474: Line 474:
[j]=x,
[j]=x,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{J,1192,"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]={{J,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    if (II->isStr(\"begin\")) {\n    } else if (II->isStr(\"end\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n        PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}}
},
},
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
Line 486: Line 486:
[j]=x,
[j]=x,
[c]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[c]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their"},
[k]={{J,1764,"/// 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]={{J,1906,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}}
},
},
["err_pp_unmatched_end_of_assume_nonnull"]={
["err_pp_unmatched_end_of_assume_nonnull"]={
Line 498: Line 498:
[j]="Nullability Issue",
[j]="Nullability Issue",
[c]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions."},
[c]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions."},
[k]={{J,1821,"/// 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]={{J,1964,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    if (IsBegin) {\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}}
},
},
["err_pp_unterminated_conditional"]={
["err_pp_unterminated_conditional"]={
Line 510: Line 510:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{"clang/lib/Lex/Lexer.cpp",2799,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // If we are in a #if directive, emit an error.\n  while (!ConditionalStack.empty()) {\n    if (PP->getCodeCompletionFileLoc() != FileLoc)\n      PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}}
[k]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // If we are in a #if directive, emit an error.\n  while (!ConditionalStack.empty()) {\n    if (PP->getCodeCompletionFileLoc() != FileLoc)\n      PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}}
},
},
["err_pp_used_poisoned_id"]={
["err_pp_used_poisoned_id"]={
Line 522: Line 522:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{"clang/lib/Lex/Preprocessor.cpp",679,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}}
[k]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}}
},
},
["err_pp_vaopt_nested_use"]={
["err_pp_vaopt_nested_use"]={
Line 534: Line 534:
[j]=x,
[j]=x,
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"},
[k]={{C,2660,"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]={{C,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    while (Tok.isNot(tok::eod)) {\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // If we\'re already within a VAOPT, emit an error.\n          if (VAOCtx.isInVAOpt()) {\n            Diag(Tok, diag::err_pp_vaopt_nested_use);"}}
},
},
["err_pp_visibility_non_macro"]={
["err_pp_visibility_non_macro"]={
Line 546: Line 546:
[j]=x,
[j]=x,
[c]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly"},
[c]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly"},
[k]={{C,1582,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{C,1608,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{J,1880,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{J,1961,"/// \"\\#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]={{C,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{C,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{J,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{J,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///  #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}}
},
},
["err_ppc_builtin_requires_abi"]={
["err_ppc_builtin_requires_abi"]={
Line 558: Line 558:
[j]=o,
[j]=o,
[c]={tb,1616787805,sb},
[c]={tb,1616787805,sb},
[k]={{v,3998,"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]={{v,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_pack_longdouble:\n    if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}}
},
},
["err_ppc_invalid_test_data_class_type"]={
["err_ppc_invalid_test_data_class_type"]={
Line 570: Line 570:
[j]=o,
[j]=o,
[c]={pb,1615397021,ub},
[c]={pb,1615397021,ub},
[k]={{v,4070,"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]={{v,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_test_data_class: {\n    if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}}
},
},
["err_ppc_invalid_use_mma_type"]={
["err_ppc_invalid_use_mma_type"]={
Line 582: Line 582:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{v,4111,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}}
[k]={{v,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}}
},
},
["err_pragma_alloc_text_c_linkage"]={
["err_pragma_alloc_text_c_linkage"]={
Line 594: Line 594:
[j]=o,
[j]=o,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{B,677,"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]={{B,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  for (auto &Function : Functions) {\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}}
},
},
["err_pragma_alloc_text_not_function"]={
["err_pragma_alloc_text_not_function"]={
Line 606: Line 606:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{B,672,"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]={{B,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  for (auto &Function : Functions) {\n    if (!FD) {\n      Diag(Loc, diag::err_pragma_alloc_text_not_function);"}}
},
},
["err_pragma_attr_attr_no_push"]={
["err_pragma_attr_attr_no_push"]={
Line 618: Line 618:
[j]=o,
[j]=o,
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[k]={{B,874,"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]={{B,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}}
},
},
["err_pragma_attribute_duplicate_subject"]={
["err_pragma_attribute_duplicate_subject"]={
Line 630: Line 630:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1411,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\n    } else if (Parens.consumeOpen()) {\n      if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n        Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{w,1457,"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]={{w,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\n    } else if (Parens.consumeOpen()) {\n      if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n        Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{w,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n      Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}}
},
},
["err_pragma_attribute_expected_attribute"]={
["err_pragma_attribute_expected_attribute"]={
Line 642: Line 642:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,3418,"/// 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]={{w,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}}
},
},
["err_pragma_attribute_expected_attribute_name"]={
["err_pragma_attribute_expected_attribute_name"]={
Line 654: Line 654:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1609,"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]={{w,1847,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n    // Parse the comma-separated list of attributes.\n    do {\n      if (Tok.isNot(tok::identifier)) {\n        Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}}
},
},
["err_pragma_attribute_expected_attribute_syntax"]={
["err_pragma_attribute_expected_attribute_syntax"]={
Line 666: Line 666:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1632,"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]={{w,1872,"void Parser::HandlePragmaAttribute() {\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  } else if (Tok.is(tok::kw___attribute)) {\n  } else if (Tok.is(tok::kw___declspec)) {\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}}
},
},
["err_pragma_attribute_expected_period"]={
["err_pragma_attribute_expected_period"]={
Line 678: Line 678:
[j]=u,
[j]=u,
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[k]={{w,3359,"/// 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]={{w,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}}
},
},
["err_pragma_attribute_expected_push_pop_paren"]={
["err_pragma_attribute_expected_push_pop_paren"]={
Line 690: Line 690:
[j]=u,
[j]=u,
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute"},
[k]={{w,3367,"/// 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]={{w,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}}
},
},
["err_pragma_attribute_expected_subject_identifier"]={
["err_pragma_attribute_expected_subject_identifier"]={
Line 702: Line 702:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1394,"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]={{w,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (Name.empty()) {\n      Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}}
},
},
["err_pragma_attribute_expected_subject_sub_identifier"]={
["err_pragma_attribute_expected_subject_sub_identifier"]={
Line 714: Line 714:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1364,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}}
[k]={{w,1565,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}}
},
},
["err_pragma_attribute_extra_tokens_after_attribute"]={
["err_pragma_attribute_extra_tokens_after_attribute"]={
Line 726: Line 726:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1701,"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]={{w,1957,"void Parser::HandlePragmaAttribute() {\n  // Tokens following an ill-formed attribute will remain in the token stream\n  // and must be removed.\n  if (Tok.isNot(tok::eof)) {\n    Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}}
},
},
["err_pragma_attribute_invalid_argument"]={
["err_pragma_attribute_invalid_argument"]={
Line 738: Line 738:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,3386,"/// 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]={{w,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  } else {\n    if (II->isStr(\"push\"))\n    else if (II->isStr(\"pop\"))\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
},
},
["err_pragma_attribute_invalid_matchers"]={
["err_pragma_attribute_invalid_matchers"]={
Line 750: Line 750:
[j]=o,
[j]=o,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{B,864,"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]={{B,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}}
},
},
["err_pragma_attribute_invalid_subject_set_specifier"]={
["err_pragma_attribute_invalid_subject_set_specifier"]={
Line 762: Line 762:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1673,"void Parser::HandlePragmaAttribute() {\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{w,1679,"void Parser::HandlePragmaAttribute() {\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}}
[k]={{w,1922,"void Parser::HandlePragmaAttribute() {\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{w,1930,"void Parser::HandlePragmaAttribute() {\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}}
},
},
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
Line 774: Line 774:
[j]=o,
[j]=o,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{B,816,"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]={{B,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    for (const auto &Rule : Rules) {\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n        Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}}
},
},
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
Line 786: Line 786:
[j]=o,
[j]=o,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{B,799,"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]={{B,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    for (const auto &Rule : Rules) {\n      if (It != Rules.end()) {\n        Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}}
},
},
["err_pragma_attribute_namespace_on_attribute"]={
["err_pragma_attribute_namespace_on_attribute"]={
Line 798: Line 798:
[j]=u,
[j]=u,
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute"},
[k]={{w,3374,"/// 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]={{w,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}}
},
},
["err_pragma_attribute_no_pop_eof"]={
["err_pragma_attribute_no_pop_eof"]={
Line 810: Line 810:
[j]=o,
[j]=o,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{B,955,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}}
[k]={{B,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}}
},
},
["err_pragma_attribute_stack_mismatch"]={
["err_pragma_attribute_stack_mismatch"]={
Line 822: Line 822:
[j]=o,
[j]=o,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{B,889,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{B,913,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{B,915,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}}
[k]={{B,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{B,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{B,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (Namespace)\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}}
},
},
["err_pragma_attribute_unknown_subject_rule"]={
["err_pragma_attribute_unknown_subject_rule"]={
Line 834: Line 834:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1399,"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]={{w,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  do {\n    if (!Rule.first) {\n      Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}}
},
},
["err_pragma_attribute_unknown_subject_sub_rule"]={
["err_pragma_attribute_unknown_subject_sub_rule"]={
Line 846: Line 846:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1373,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}}
[k]={{w,1578,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}}
},
},
["err_pragma_attribute_unsupported_attribute"]={
["err_pragma_attribute_unsupported_attribute"]={
Line 858: Line 858:
[j]=u,
[j]=u,
[c]={P,1492508507,N},
[c]={P,1492508507,N},
[k]={{w,1659,"void Parser::HandlePragmaAttribute() {\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}}
[k]={{w,1903,"void Parser::HandlePragmaAttribute() {\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}}
},
},
["err_pragma_cannot_end_force_cuda_host_device"]={
["err_pragma_cannot_end_force_cuda_host_device"]={
Line 870: Line 870:
[j]=u,
[j]=u,
[c]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."},
[c]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."},
[k]={{w,3312,"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]={{w,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Info->isStr(\"begin\"))\n  else if (!Actions.PopForceCUDAHostDevice())\n    PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}}
},
},
["err_pragma_clang_section_expected_equal"]={
["err_pragma_clang_section_expected_equal"]={
Line 882: Line 882:
[j]=u,
[j]=u,
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[k]={{w,1950,"// #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]={{w,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}}
},
},
["err_pragma_comment_malformed"]={
["err_pragma_comment_malformed"]={
Line 894: Line 894:
[j]=u,
[j]=u,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{w,2714,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{w,2721,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{w,2753,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{w,2759,"/// 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]={{w,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{w,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{w,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{w,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}}
},
},
["err_pragma_comment_unknown_kind"]={
["err_pragma_comment_unknown_kind"]={
Line 906: Line 906:
[j]=u,
[j]=u,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{w,2729,"/// 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]={{w,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}}
},
},
["err_pragma_detect_mismatch_malformed"]={
["err_pragma_detect_mismatch_malformed"]={
Line 918: Line 918:
[j]=u,
[j]=u,
[c]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co..."},
[c]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co..."},
[k]={{w,2675,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{w,2690,"/// 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]={{w,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{w,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}}
},
},
["err_pragma_expected_clang_section_name"]={
["err_pragma_expected_clang_section_name"]={
Line 930: Line 930:
[j]=u,
[j]=u,
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section"},
[k]={{w,1927,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{w,1943,"// #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]={{w,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{w,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  while (Tok.isNot(tok::eod)) {\n    if (SecType->isStr(\"bss\"))\n    else if (SecType->isStr(\"data\"))\n    else if (SecType->isStr(\"rodata\"))\n    else if (SecType->isStr(\"relro\"))\n    else if (SecType->isStr(\"text\"))\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}}
},
},
["err_pragma_expected_file_scope"]={
["err_pragma_expected_file_scope"]={
Line 942: Line 942:
[j]=o,
[j]=o,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{B,654,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{B,967,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{B,976,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}}
[k]={{B,793,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{B,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{B,1260,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}}
},
},
["err_pragma_expected_integer"]={
["err_pragma_expected_integer"]={
Line 954: Line 954:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{w,3464,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{w,3489,"// 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]={{w,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{w,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}}
},
},
["err_pragma_fc_except_requires_precise"]={
["err_pragma_fc_except_requires_precise"]={
Line 966: Line 966:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{B,484,"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]={{B,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_Except:\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}}
},
},
["err_pragma_fc_noprecise_requires_noexcept"]={
["err_pragma_fc_noprecise_requires_noexcept"]={
Line 978: Line 978:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{B,475,"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]={{B,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}}
},
},
["err_pragma_fc_noprecise_requires_nofenv"]={
["err_pragma_fc_noprecise_requires_nofenv"]={
Line 990: Line 990:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{B,477,"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]={{B,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n    else if (CurFPFeatures.getAllowFEnvAccess())\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}}
},
},
["err_pragma_fc_pp_scope"]={
["err_pragma_fc_pp_scope"]={
Line 1,002: Line 1,002:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{B,463,"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]={{B,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}}
},
},
["err_pragma_fenv_requires_precise"]={
["err_pragma_fenv_requires_precise"]={
Line 1,014: Line 1,014:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{B,1147,"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]={{B,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n  if (IsEnabled) {\n    // Verify Microsoft restriction:\n    // You can\'t enable fenv_access unless precise semantics are enabled.\n    // Precise semantics can be enabled either by the float_control\n    // pragma, or by using the /fp:precise or /fp:strict compiler options\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fenv_requires_precise);"}}
},
},
["err_pragma_file_or_compound_scope"]={
["err_pragma_file_or_compound_scope"]={
Line 1,026: Line 1,026:
[j]=u,
[j]=u,
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[k]={{mb,395,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp_contract:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{mb,402,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{mb,410,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_access_ms:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{mb,417,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_round:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{mb,424,"#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]={{mb,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp_contract:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{mb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fp:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{mb,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_access_ms:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{mb,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_fenv_round:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{mb,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  case tok::annot_pragma_float_control:\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}}
},
},
["err_pragma_float_control_malformed"]={
["err_pragma_float_control_malformed"]={
Line 1,038: Line 1,038:
[j]=u,
[j]=u,
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control"},
[k]={{w,2558,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2567,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2571,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n    if (Tok.isNot(tok::r_paren)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2581,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2586,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2601,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (PushOnOff == \"on\")\n      else if (PushOnOff == \"off\") {\n      } else if (PushOnOff == \"push\") {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2608,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2615,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (ExpectedPush == \"push\") {\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2621,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}}
[k]={{w,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n    if (Tok.isNot(tok::r_paren)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (PushOnOff == \"on\")\n      else if (PushOnOff == \"off\") {\n      } else if (PushOnOff == \"push\") {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (ExpectedPush == \"push\") {\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{w,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Kind == PFC_Unknown) {\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  } else {\n    if (Tok.is(tok::r_paren))\n    else if (Tok.isNot(tok::comma)) {\n    } else {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}}
},
},
["err_pragma_fp_invalid_argument"]={
["err_pragma_fp_invalid_argument"]={
Line 1,050: Line 1,050:
[j]=u,
[j]=u,
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[k]={{w,2847,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n    if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{w,2855,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{w,2861,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{w,2867,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{w,2873,"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]={{w,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n    if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{w,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{w,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{w,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{w,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}}
},
},
["err_pragma_fp_invalid_option"]={
["err_pragma_fp_invalid_option"]={
Line 1,062: Line 1,062:
[j]=u,
[j]=u,
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp"},
[k]={{w,2822,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{w,2832,"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]={{w,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{w,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}
},
},
["err_pragma_invalid_keyword"]={
["err_pragma_invalid_keyword"]={
Line 1,074: Line 1,074:
[j]=u,
[j]=u,
[c]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute."},
[c]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute."},
[k]={{w,1231,"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]={{w,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n      } else {\n        Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}
},
},
["err_pragma_loop_compatibility"]={
["err_pragma_loop_compatibility"]={
Line 1,086: Line 1,086:
[j]=o,
[j]=o,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",364,"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",371,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  for (const auto *I : Attrs) {\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}}
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  for (const auto *I : Attrs) {\n    if (PrevAttr)\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  for (const auto *I : Attrs) {\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}}
},
},
["err_pragma_loop_invalid_argument_type"]={
["err_pragma_loop_invalid_argument_type"]={
Line 1,098: Line 1,098:
[j]=o,
[j]=o,
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[k]={{p,3330,"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]={{p,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}}
},
},
["err_pragma_loop_invalid_argument_value"]={
["err_pragma_loop_invalid_argument_value"]={
Line 1,110: Line 1,110:
[j]=o,
[j]=o,
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints."},
[k]={{p,3342,"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]={{p,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}}
},
},
["err_pragma_loop_invalid_option"]={
["err_pragma_loop_invalid_option"]={
Line 1,122: Line 1,122:
[j]=u,
[j]=u,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[k]={{w,3059,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{w,3069,"/// 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]={{w,3515,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{w,3537,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  while (Tok.is(tok::identifier)) {\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}
},
},
["err_pragma_loop_invalid_vectorize_option"]={
["err_pragma_loop_invalid_vectorize_option"]={
Line 1,134: Line 1,134:
[j]=u,
[j]=u,
[c]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[c]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[k]={{w,1275,"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]={{w,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    } else {\n      if (Tok.is(tok::comma)) {\n        if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n          Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
},
},
["err_pragma_loop_missing_argument"]={
["err_pragma_loop_missing_argument"]={
Line 1,146: Line 1,146:
[j]=u,
[j]=u,
[c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"},
[c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE"},
[k]={{w,1216,"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]={{w,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}
},
},
["err_pragma_loop_precedes_nonloop"]={
["err_pragma_loop_precedes_nonloop"]={
Line 1,158: Line 1,158:
[j]=o,
[j]=o,
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints."},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",79,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n  // This could be handled automatically by adding a Subjects definition in\n  // Attr.td, but that would make the diagnostic behavior worse in this case\n  // because the user spells this attribute as a pragma.\n  if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}}
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n  // This could be handled automatically by adding a Subjects definition in\n  // Attr.td, but that would make the diagnostic behavior worse in this case\n  // because the user spells this attribute as a pragma.\n  if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}}
},
},
["err_pragma_message_malformed"]={
["err_pragma_message_malformed"]={
Line 1,170: Line 1,170:
[j]=x,
[j]=x,
[c]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"},
[c]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"},
[k]={{J,1539,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{J,1550,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{J,1557,"/// 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]={{J,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{J,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{J,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}}
},
},
["err_pragma_misplaced_in_decl"]={
["err_pragma_misplaced_in_decl"]={
Line 1,182: Line 1,182:
[j]=u,
[j]=u,
[c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"},
[c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma"},
[k]={{R,4231,"/// ParseStructUnionBody\n///      struct-contents:\n///        struct-declaration-list\n/// [EXT]  empty\n/// [GNU]  \"struct-declaration-list\" without terminating \';\'\n///      struct-declaration-list:\n///        struct-declaration\n///        struct-declaration-list struct-declaration\n/// [OBC]  \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n  // While we still have something to read, read the declarations in the struct.\n  while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{bb,2954,"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]={{R,4671,"/// ParseStructUnionBody\n///      struct-contents:\n///        struct-declaration-list\n/// [EXT]  empty\n/// [GNU]  \"struct-declaration-list\" without terminating \';\'\n///      struct-declaration-list:\n///        struct-declaration\n///        struct-declaration-list struct-declaration\n/// [OBC]  \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n  // While we still have something to read, read the declarations in the struct.\n  while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{bb,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}}
},
},
["err_pragma_missing_argument"]={
["err_pragma_missing_argument"]={
Line 1,194: Line 1,194:
[j]=u,
[j]=u,
[c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."},
[c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."},
[k]={{w,2776,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{w,3457,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{w,3482,"// 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]={{w,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{w,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{w,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}}
},
},
["err_pragma_optimize_extra_argument"]={
["err_pragma_optimize_extra_argument"]={
Line 1,206: Line 1,206:
[j]=u,
[j]=u,
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[k]={{w,2795,"// #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]={{w,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}}
},
},
["err_pragma_optimize_invalid_argument"]={
["err_pragma_optimize_invalid_argument"]={
Line 1,218: Line 1,218:
[j]=u,
[j]=u,
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'."},
[k]={{w,2780,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{w,2789,"// #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]={{w,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{w,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  if (II->isStr(\"on\")) {\n  } else if (!II->isStr(\"off\")) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}}
},
},
["err_pragma_options_align_mac68k_target_unsupported"]={
["err_pragma_options_align_mac68k_target_unsupported"]={
Line 1,230: Line 1,230:
[j]=o,
[j]=o,
[c]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."},
[c]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin."},
[k]={{B,192,"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]={{B,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n  case POAK_Mac68k:\n    // Check if the target supports this.\n    if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n      Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}}
},
},
["err_pragma_pack_identifer_not_supported"]={
["err_pragma_pack_identifer_not_supported"]={
Line 1,242: Line 1,242:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{B,267,"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]={{B,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // XL pragma pack does not support identifier syntax.\n  if (IsXLPragma && !SlotLabel.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}}
},
},
["err_pragma_pack_invalid_alignment"]={
["err_pragma_pack_invalid_alignment"]={
Line 1,254: Line 1,254:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{B,291,"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]={{B,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  if (Alignment) {\n    if (IsXLPragma && *Val == 0) {\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}}
},
},
["err_pragma_pipeline_invalid_keyword"]={
["err_pragma_pipeline_invalid_keyword"]={
Line 1,266: Line 1,266:
[j]=u,
[j]=u,
[c]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations."},
[c]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations."},
[k]={{w,1229,"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]={{w,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // Validate the argument.\n  if (StateOption) {\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}}
},
},
["err_pragma_pointers_to_members_unknown_kind"]={
["err_pragma_pointers_to_members_unknown_kind"]={
Line 1,278: Line 1,278:
[j]=u,
[j]=u,
[c]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members"},
[c]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members"},
[k]={{w,2367,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{w,2390,"/// 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]={{w,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{w,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (Arg->isStr(\"best_case\")) {\n  } else {\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n      } else if (Arg->isStr(\"multiple_inheritance\")) {\n      } else if (Arg->isStr(\"virtual_inheritance\")) {\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}}
},
},
["err_pragma_pop_visibility_mismatch"]={
["err_pragma_pop_visibility_mismatch"]={
Line 1,290: Line 1,290:
[j]=o,
[j]=o,
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[k]={{B,1167,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{B,1187,"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]={{B,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{B,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}}
},
},
["err_pragma_push_pop_macro_malformed"]={
["err_pragma_push_pop_macro_malformed"]={
Line 1,302: Line 1,302:
[j]=x,
[j]=x,
[c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"},
[c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"},
[k]={{J,560,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{J,567,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{J,582,"/// 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]={{J,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{J,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{J,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}}
},
},
["err_pragma_push_visibility_mismatch"]={
["err_pragma_push_visibility_mismatch"]={
Line 1,314: Line 1,314:
[j]=o,
[j]=o,
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\"."},
[k]={{B,1177,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}}
[k]={{B,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}}
},
},
["err_pragma_section_invalid_for_target"]={
["err_pragma_section_invalid_for_target"]={
Line 1,326: Line 1,326:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{B,250,"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]={{B,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}}
},
},
["err_preserve_enum_value_invalid"]={
["err_preserve_enum_value_invalid"]={
Line 1,338: Line 1,338:
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,3150,"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]={{v,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      kind = diag::err_preserve_enum_value_invalid;"}}
},
},
["err_preserve_enum_value_not_const"]={
["err_preserve_enum_value_not_const"]={
Line 1,350: Line 1,350:
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,3128,"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]={{v,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
},
},
["err_preserve_field_info_not_const"]={
["err_preserve_field_info_not_const"]={
Line 1,362: Line 1,362:
[j]=a,
[j]=a,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{v,3122,"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]={{v,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}}
},
},
["err_preserve_field_info_not_field"]={
["err_preserve_field_info_not_field"]={
Line 1,374: Line 1,374:
[j]=a,
[j]=a,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{v,3140,"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]={{v,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      kind = diag::err_preserve_field_info_not_field;"}}
},
},
["err_preserve_type_info_invalid"]={
["err_preserve_type_info_invalid"]={
Line 1,386: Line 1,386:
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,3145,"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]={{v,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n    if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n      kind = diag::err_preserve_type_info_invalid;"}}
},
},
["err_preserve_type_info_not_const"]={
["err_preserve_type_info_not_const"]={
Line 1,398: Line 1,398:
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,3126,"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]={{v,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n      kind = diag::err_preserve_type_info_not_const;"}}
},
},
["err_private_ivar_access"]={
["err_private_ivar_access"]={
Line 1,410: Line 1,410:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{p,2543,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  if (LookForIvars) {\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n      // Diagnose the use of an ivar outside of the declaring class.\n      if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n        Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{I,1185,"/// 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]={{p,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  if (LookForIvars) {\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n      // Diagnose the use of an ivar outside of the declaring class.\n      if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n        Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{I,1445,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n          if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n            S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}}
},
},
["err_private_module_fragment_expected_semi"]={
["err_private_module_fragment_expected_semi"]={
Line 1,422: Line 1,422:
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[k]={{Z,2196,"/// 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]={{Z,2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
},
},
["err_private_module_fragment_not_module"]={
["err_private_module_fragment_not_module"]={
Line 1,434: Line 1,434:
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[k]={{"clang/lib/Sema/SemaModule.cpp",395,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}}
[k]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}}
},
},
["err_private_module_fragment_not_module_interface"]={
["err_private_module_fragment_not_module_interface"]={
Line 1,446: Line 1,446:
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[k]={{"clang/lib/Sema/SemaModule.cpp",404,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}}
[k]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}}
},
},
["err_private_module_fragment_redefined"]={
["err_private_module_fragment_redefined"]={
Line 1,458: Line 1,458:
[j]="Modules Issue",
[j]="Modules Issue",
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[k]={{"clang/lib/Sema/SemaModule.cpp",399,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}}
[k]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}}
},
},
["err_probability_not_constant_float"]={
["err_probability_not_constant_float"]={
Line 1,470: Line 1,470:
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,2169,"#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]={{v,2441,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_expect_with_probability: {\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}}
},
},
["err_probability_out_of_range"]={
["err_probability_out_of_range"]={
Line 1,482: Line 1,482:
[j]=a,
[j]=a,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,2178,"#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]={{v,2453,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_expect_with_probability: {\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}}
},
},
["err_property_accessor_type"]={
["err_property_accessor_type"]={
Line 1,494: Line 1,494:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{Q,1378,"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]={{Q,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}}
},
},
["err_property_found_suggest"]={
["err_property_found_suggest"]={
Line 1,506: Line 1,506:
[j]=o,
[j]=o,
[c]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."},
[c]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access."},
[k]={{I,1146,"/// 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]={{I,1398,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      } else {\n        if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n          S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}}
},
},
["err_property_function_in_objc_container"]={
["err_property_function_in_objc_container"]={
Line 1,518: Line 1,518:
[j]=o,
[j]=o,
[c]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, "},
[c]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, "},
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",581,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}}
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",699,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}}
},
},
["err_property_implemented"]={
["err_property_implemented"]={
Line 1,530: Line 1,530:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{Q,1258,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{Q,1289,"/// 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]={{Q,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{Q,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (IC) {\n  } else {\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}}
},
},
["err_property_is_variably_modified"]={
["err_property_is_variably_modified"]={
Line 1,542: Line 1,542:
[j]=o,
[j]=o,
[c]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and"},
[c]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and"},
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1084,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
},
},
["err_property_ivar_type"]={
["err_property_ivar_type"]={
Line 1,554: Line 1,554:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{Q,1124,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{Q,1135,"/// 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]={{Q,1376,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{Q,1391,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n      } else {\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}}
},
},
["err_property_method_unavailable"]={
["err_property_method_unavailable"]={
Line 1,566: Line 1,566:
[j]=o,
[j]=o,
[c]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared"},
[c]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared"},
[k]={{"clang/lib/Sema/SemaAvailability.cpp",382,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}
[k]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}
},
},
["err_property_not_as_forward_class"]={
["err_property_not_as_forward_class"]={
Line 1,578: Line 1,578:
[j]=o,
[j]=o,
[c]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of"},
[c]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of"},
[k]={{db,1728,"/// 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]={{db,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n    if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n      if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}}
},
},
["err_property_not_found"]={
["err_property_not_found"]={
Line 1,590: Line 1,590:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{I,1270,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{I,1317,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{db,1735,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{db,1823,"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]={{I,1549,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{I,1604,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{db,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{db,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}}
},
},
["err_property_not_found_forward_class"]={
["err_property_not_found_forward_class"]={
Line 1,602: Line 1,602:
[j]=o,
[j]=o,
[c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[k]={{db,1622,"/// 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]={{db,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}}
},
},
["err_property_not_found_suggest"]={
["err_property_not_found_suggest"]={
Line 1,614: Line 1,614:
[j]=o,
[j]=o,
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[k]={{db,1720,"/// 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]={{db,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}}
},
},
["err_property_setter_ambiguous_use"]={
["err_property_setter_ambiguous_use"]={
Line 1,626: Line 1,626:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",561,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}}
[k]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}}
},
},
["err_property_type"]={
["err_property_type"]={
Line 1,638: Line 1,638:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{Q,516,"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]={{Q,638,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}}
},
},
["err_protected_ivar_access"]={
["err_protected_ivar_access"]={
Line 1,650: Line 1,650:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{I,1188,"/// 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]={{I,1449,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}}
},
},
["err_protocol_has_circular_dependency"]={
["err_protocol_has_circular_dependency"]={
Line 1,662: Line 1,662:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{Y,950,"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]={{Y,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n  for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n    if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n      if (PDecl->getIdentifier() == PName) {\n        Diag(Ploc, diag::err_protocol_has_circular_dependency);"}}
},
},
["err_protocol_property_mismatch"]={
["err_protocol_property_mismatch"]={
Line 1,674: Line 1,674:
[j]=o,
[j]=o,
[c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"},
[c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous"},
[k]={{Q,789,"/// 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]={{Q,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  // Diagnose incompability.\n  {\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}}
},
},
["err_pseudo_dtor_base_not_scalar"]={
["err_pseudo_dtor_base_not_scalar"]={
Line 1,686: Line 1,686:
[j]=o,
[j]=o,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[k]={{E,6736,"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]={{E,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}}
},
},
["err_pseudo_dtor_call_with_args"]={
["err_pseudo_dtor_call_with_args"]={
Line 1,698: Line 1,698:
[j]=o,
[j]=o,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[k]={{p,6112,"/// 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]={{p,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  if (getLangOpts().CPlusPlus) {\n    // If this is a pseudo-destructor expression, build the call immediately.\n    if (isa<CXXPseudoDestructorExpr>(Fn)) {\n      if (!ArgExprs.empty()) {\n        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}}
},
},
["err_pseudo_dtor_destructor_non_type"]={
["err_pseudo_dtor_destructor_non_type"]={
Line 1,710: Line 1,710:
[j]=o,
[j]=o,
[c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"},
[c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for"},
[k]={{E,6844,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{E,6881,"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]={{E,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{E,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      if (!T) {\n        Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}}
},
},
["err_pseudo_dtor_type_mismatch"]={
["err_pseudo_dtor_type_mismatch"]={
Line 1,722: Line 1,722:
[j]=o,
[j]=o,
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor"},
[k]={{E,6764,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n  //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{E,6799,"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]={{E,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n  //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{E,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // C++ [expr.pseudo]p2:\n  //  [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n  //  form\n  //\n  //    ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n  //\n  //  shall designate the same scalar type.\n  if (ScopeTypeInfo) {\n    if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n      Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}}
},
},
["err_pure_friend"]={
["err_pure_friend"]={
Line 1,734: Line 1,734:
[j]=o,
[j]=o,
[c]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and"},
[c]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and"},
[k]={{y,15502,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}}
[k]={{y,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}}
},
},
["err_qualified_catch_declarator"]={
["err_qualified_catch_declarator"]={
Line 1,746: Line 1,746:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{y,14302,"/// 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]={{y,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  if (D.getCXXScopeSpec().isSet() && !Invalid) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}}
},
},
["err_qualified_friend_def"]={
["err_qualified_friend_def"]={
Line 1,758: Line 1,758:
[j]=o,
[j]=o,
[c]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow"},
[c]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow"},
[k]={{y,15066,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n    if (D.isFunctionDefinition()) {\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{y,15085,"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]={{y,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n    if (D.isFunctionDefinition()) {\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{y,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n  } else {\n    if (D.isFunctionDefinition()) {\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}}
},
},
["err_qualified_friend_no_match"]={
["err_qualified_friend_no_match"]={
Line 1,770: Line 1,770:
[j]=o,
[j]=o,
[c]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a"},
[c]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a"},
[k]={{t,7910,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{q,7800,"/// 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]={{t,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{q,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // For a qualified friend declaration (with no explicit marker to indicate\n  // that a template specialization was intended), note all (template and\n  // non-template) candidates.\n  if (QualifiedFriend && Candidates.empty()) {\n    Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}}
},
},
["err_qualified_function_typeid"]={
["err_qualified_function_typeid"]={
Line 1,782: Line 1,782:
[j]=o,
[j]=o,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{F,1889,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}}
[k]={{F,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}}
},
},
["err_qualified_member_nonclass"]={
["err_qualified_member_nonclass"]={
Line 1,794: Line 1,794:
[j]=o,
[j]=o,
[c]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!"},
[c]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!"},
[k]={{I,589,"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]={{I,683,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (SS.isSet()) {\n    if (!isa<TypeDecl>(DC)) {\n      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}}
},
},
["err_qualified_member_of_unrelated"]={
["err_qualified_member_of_unrelated"]={
Line 1,806: Line 1,806:
[j]=o,
[j]=o,
[c]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access"},
[c]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access"},
[k]={{I,468,"/// 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]={{I,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression.  Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}}
},
},
["err_qualified_objc_access"]={
["err_qualified_objc_access"]={
Line 1,818: Line 1,818:
[j]=o,
[j]=o,
[c]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or"},
[c]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or"},
[k]={{I,1093,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{I,1227,"/// 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]={{I,1331,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{I,1494,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}}
},
},
["err_qualified_objc_catch_parm"]={
["err_qualified_objc_catch_parm"]={
Line 1,830: Line 1,830:
[j]=o,
[j]=o,
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[k]={{Y,4351,"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]={{Y,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}}
},
},
["err_qualified_param_declarator"]={
["err_qualified_param_declarator"]={
Line 1,842: Line 1,842:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,12830,"/// 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]={{t,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}}
},
},
["err_qualified_typedef_declarator"]={
["err_qualified_typedef_declarator"]={
Line 1,854: Line 1,854:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,5912,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}}
[k]={{t,6661,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}}
},
},
["err_range_on_array_parameter"]={
["err_range_on_array_parameter"]={
Line 1,866: Line 1,866:
[j]=o,
[j]=o,
[c]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a"},
[c]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a"},
[k]={{K,2518,"/// 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]={{K,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    } else {\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}}
},
},
["err_raw_delim_too_long"]={
["err_raw_delim_too_long"]={
Line 1,878: Line 1,878:
[j]=x,
[j]=x,
[c]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals."},
[c]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals."},
[k]={{"clang/lib/Lex/Lexer.cpp",1955,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}}
[k]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}}
},
},
["err_readonly_message_assignment"]={
["err_readonly_message_assignment"]={
Line 1,890: Line 1,890:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{p,12378,"/// 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]={{p,14373,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}}
},
},
["err_realimag_invalid_type"]={
["err_realimag_invalid_type"]={
Line 1,902: Line 1,902:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,4264,"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]={{p,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}}
},
},
["err_record_with_pointers_kernel_param"]={
["err_record_with_pointers_kernel_param"]={
Line 1,914: Line 1,914:
[j]=o,
[j]=o,
[c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[k]={{t,8420,"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]={{t,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      // OpenCL v1.2 s6.9.p:\n      // Arguments to kernel functions that are declared to be a struct or union\n      // do not allow OpenCL objects to be passed as elements of the struct or\n      // union. This restriction was lifted in OpenCL v2.0 with the introduction\n      // of SVM.\n      if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n        S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}}
},
},
["err_recursive_default_argument"]={
["err_recursive_default_argument"]={
Line 1,926: Line 1,926:
[j]=o,
[j]=o,
[c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"},
[c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition"},
[k]={{p,5237,"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",2229,"/// 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]={{p,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n  if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}}
},
},
["err_recursive_superclass"]={
["err_recursive_superclass"]={
Line 1,938: Line 1,938:
[j]=o,
[j]=o,
[c]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class."},
[c]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class."},
[k]={{Y,477,"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]={{Y,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n    Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}}
},
},
["err_redeclaration_different_type"]={
["err_redeclaration_different_type"]={
Line 1,950: Line 1,950:
[j]=o,
[j]=o,
[c]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree"},
[c]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree"},
[k]={{t,3922,"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]={{t,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}
},
},
["err_redeclaration_non_exported"]={
["err_redeclaration_non_exported"]={
Line 1,962: Line 1,962:
[j]=o,
[j]=o,
[c]={tb,1616787805,sb},
[c]={tb,1616787805,sb},
[k]={{t,1542,"// [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]={{t,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}}
},
},
["err_redefinition"]={
["err_redefinition"]={
Line 1,974: Line 1,974:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,2453,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  if (getLangOpts().CPlusPlus) {\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{t,2749,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{t,2751,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        if (Diag == diag::err_redefinition)"},{t,4187,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{t,4324,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n  if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{t,13236,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{t,15181,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        if (!Invalid) {\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{t,17057,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{y,793,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    if (!Previous.empty()) {\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{y,11138,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{y,11550,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{y,14293,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{p,4838,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  for (const OMPIteratorData &D : Data) {\n    if (S) {\n      if (!Previous.empty()) {\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{q,1702,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{q,7294,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    } else if (Def) {\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{q,7446,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3180,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}}
[k]={{t,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  if (getLangOpts().CPlusPlus) {\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{t,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{t,3044,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      } else {\n        if (Diag == diag::err_redefinition)"},{t,4683,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{t,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n  if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{t,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{t,17369,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        if (!Invalid) {\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{t,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{y,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    if (!Previous.empty()) {\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{y,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{y,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{y,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{p,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  for (const OMPIteratorData &D : Data) {\n    if (S) {\n      if (!Previous.empty()) {\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{q,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{q,8904,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    } else if (Def) {\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{q,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}}
},
},
["err_redefinition_different_concept"]={
["err_redefinition_different_concept"]={
Line 1,986: Line 1,986:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{q,7440,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
[k]={{q,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
},
},
["err_redefinition_different_kind"]={
["err_redefinition_different_kind"]={
Line 1,998: Line 1,998:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,2362,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,3291,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,4080,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,15267,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      } else {\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{y,9820,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  if (II) {\n    if (PrevNS) {\n    } else if (PrevDecl) {\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{y,11138,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{y,11443,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{y,11550,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{Y,514,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  } else {\n    if (PrevDecl && !SuperClassDecl) {\n      // This handles the following case:\n      //\n      // typedef int SuperClass;\n      // @interface MyClass : SuperClass {} @end\n      //\n      if (!SuperClassDecl) {\n        Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{Y,782,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Y,1601,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Y,1629,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (SuperClassname) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{Y,2475,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{q,1716,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n  } else if (PrevDecl) {\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{q,7432,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!OldConcept) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}}
[k]={{t,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,17460,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      } else {\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{y,11434,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  if (II) {\n    if (PrevNS) {\n    } else if (PrevDecl) {\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{y,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{y,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{y,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{Y,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  } else {\n    if (PrevDecl && !SuperClassDecl) {\n      // This handles the following case:\n      //\n      // typedef int SuperClass;\n      // @interface MyClass : SuperClass {} @end\n      //\n      if (!SuperClassDecl) {\n        Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{Y,991,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Y,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Y,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  if (SuperClassname) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{Y,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{q,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (PrevClassTemplate) {\n  } else if (PrevDecl) {\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{q,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  if (!OldConcept) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}}
},
},
["err_redefinition_different_namespace_alias"]={
["err_redefinition_different_namespace_alias"]={
Line 2,010: Line 2,010:
[j]=o,
[j]=o,
[c]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[c]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes"},
[k]={{y,11545,"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]={{y,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (PrevR.isSingleResult()) {\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}}
},
},
["err_redefinition_different_type"]={
["err_redefinition_different_type"]={
Line 2,022: Line 2,022:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,3922,"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]={{t,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}
},
},
["err_redefinition_different_typedef"]={
["err_redefinition_different_typedef"]={
Line 2,034: Line 2,034:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,2298,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{y,11463,"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]={{t,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{y,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  if (TemplateParamLists.size()) {\n    if (!Previous.empty()) {\n      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n        if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}}
},
},
["err_redefinition_extern_inline"]={
["err_redefinition_extern_inline"]={
Line 2,046: Line 2,046:
[j]=o,
[j]=o,
[c]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern"},
[c]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern"},
[k]={{t,13234,"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]={{t,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n    Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}}
},
},
["err_redefinition_of_enumerator"]={
["err_redefinition_of_enumerator"]={
Line 2,058: Line 2,058:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,17055,"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]={{t,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  if (PrevDecl) {\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}}
},
},
["err_redefinition_of_label"]={
["err_redefinition_of_label"]={
Line 2,070: Line 2,070:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{K,505,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // If the label was multiply defined, reject it now.\n  if (TheDecl->getStmt()) {\n    Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}}
[k]={{K,559,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // If the label was multiply defined, reject it now.\n  if (TheDecl->getStmt()) {\n    Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}}
},
},
["err_redefinition_variably_modified_typedef"]={
["err_redefinition_variably_modified_typedef"]={
Line 2,082: Line 2,082:
[j]=o,
[j]=o,
[c]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a"},
[c]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a"},
[k]={{t,2289,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (NewType->isVariablyModifiedType()) {\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}}
[k]={{t,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  if (NewType->isVariablyModifiedType()) {\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}}
},
},
["err_ref_array_type"]={
["err_ref_array_type"]={
Line 2,094: Line 2,094:
[j]=o,
[j]=o,
[c]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948."},
[c]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948."},
[k]={{p,16685,"// 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]={{p,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // Blocks are not allowed to capture arrays, excepting OpenCL.\n  // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n  // (decayed to pointers).\n  if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_ref_array_type);"}}
},
},
["err_ref_bad_target"]={
["err_ref_bad_target"]={
Line 2,106: Line 2,106:
[j]=o,
[j]=o,
[c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets"},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",743,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{p,16502,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}}
[k]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{p,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}}
},
},
["err_ref_bad_target_global_initializer"]={
["err_ref_bad_target_global_initializer"]={
Line 2,118: Line 2,118:
[j]=o,
[j]=o,
[c]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers."},
[c]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers."},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",574,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if (InitFn) {\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}}
[k]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  } else {\n    if (InitFn) {\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}}
},
},
["err_ref_flexarray_type"]={
["err_ref_flexarray_type"]={
Line 2,130: Line 2,130:
[j]=o,
[j]=o,
[c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "},
[c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture "},
[k]={{p,16637,"// 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]={{p,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        if (IsBlock)\n          S.Diag(Loc, diag::err_ref_flexarray_type);"}}
},
},
["err_ref_init_ambiguous"]={
["err_ref_init_ambiguous"]={
Line 2,142: Line 2,142:
[j]=o,
[j]=o,
[c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."},
[c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization."},
[k]={{D,8173,"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]={{D,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}}
},
},
["err_ref_non_value"]={
["err_ref_non_value"]={
Line 2,154: Line 2,154:
[j]=o,
[j]=o,
[c]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[c]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a"},
[k]={{p,2907,"/// 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]={{p,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n  // Make sure that we\'re referring to a value.\n  if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}}
},
},
["err_ref_qualifier_comparison_operator"]={
["err_ref_qualifier_comparison_operator"]={
Line 2,166: Line 2,166:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{y,7421,"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]={{y,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  if (IsMethod) {\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}}
},
},
["err_ref_qualifier_constructor"]={
["err_ref_qualifier_constructor"]={
Line 2,178: Line 2,178:
[j]=o,
[j]=o,
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[k]={{y,9224,"/// 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]={{y,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}
},
},
["err_ref_qualifier_destructor"]={
["err_ref_qualifier_destructor"]={
Line 2,190: Line 2,190:
[j]=o,
[j]=o,
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[c]={"db9d66424425",1296018118,"Rvalue references for *this: "},
[k]={{y,9376,"/// 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]={{y,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid.  Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}
},
},
["err_ref_qualifier_overload"]={
["err_ref_qualifier_overload"]={
Line 2,202: Line 2,202:
[j]=o,
[j]=o,
[c]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot"},
[c]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot"},
[k]={{ab,1189,"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]={{ab,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n  if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n    if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n      if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n        Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}}
},
},
["err_ref_vm_type"]={
["err_ref_vm_type"]={
Line 2,214: Line 2,214:
[j]=o,
[j]=o,
[c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."},
[c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks."},
[k]={{p,16626,"// 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]={{p,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n  if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_ref_vm_type);"}}
},
},
["err_refactor_code_outside_of_function"]={
["err_refactor_code_outside_of_function"]={
Line 2,226: Line 2,226:
[j]=ib,
[j]=ib,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",74,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // We would like to extract code out of functions/methods/blocks.\n  // Prohibit extraction from things like global variable / field\n  // initializers and other top-level expressions.\n  if (!Code.isInFunctionLikeBodyOfCode())\n    return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}}
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // We would like to extract code out of functions/methods/blocks.\n  // Prohibit extraction from things like global variable / field\n  // initializers and other top-level expressions.\n  if (!Code.isInFunctionLikeBodyOfCode())\n    return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}}
},
},
["err_refactor_extract_prohibited_expression"]={
["err_refactor_extract_prohibited_expression"]={
Line 2,238: Line 2,238:
[j]=ib,
[j]=ib,
[c]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters"},
[c]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters"},
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",84,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  if (Code.size() == 1) {\n    // Property setters can\'t be extracted.\n    if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n      if (!PRE->isMessagingGetter())\n        return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}}
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  if (Code.size() == 1) {\n    // Property setters can\'t be extracted.\n    if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n      if (!PRE->isMessagingGetter())\n        return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}}
},
},
["err_refactor_extract_simple_expression"]={
["err_refactor_extract_simple_expression"]={
Line 2,250: Line 2,250:
[j]=ib,
[j]=ib,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  if (Code.size() == 1) {\n    // Avoid extraction of simple literals and references.\n    if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n      return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
[k]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  if (Code.size() == 1) {\n    // Avoid extraction of simple literals and references.\n    if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n      return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
},
},
["err_refactor_no_selection"]={
["err_refactor_no_selection"]={
Line 2,262: Line 2,262:
[j]=ib,
[j]=ib,
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",117,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
[k]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
},
},
["err_refactor_selection_invalid_ast"]={
["err_refactor_selection_invalid_ast"]={
Line 2,274: Line 2,274:
[j]=ib,
[j]=ib,
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring"},
[k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",24,"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",36,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
[k]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  if (!Selection)\n    return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
},
},
["err_refactor_selection_no_symbol"]={
["err_refactor_selection_no_symbol"]={
Line 2,286: Line 2,286:
[j]=ib,
[j]=ib,
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics"},
[k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",65,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
[k]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
},
},
["err_reference_bind_drops_quals"]={
["err_reference_bind_drops_quals"]={
Line 2,298: Line 2,298:
[j]=o,
[j]=o,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,zb},
[k]={{D,8243,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{D,8246,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{D,8251,"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]={{D,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{D,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{D,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitDropsQualifiers: {\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    else if (DroppedQualifiers.hasQualifiers())\n    else\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}}
},
},
["err_reference_bind_failed"]={
["err_reference_bind_failed"]={
Line 2,310: Line 2,310:
[j]=o,
[j]=o,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,zb},
[k]={{D,8257,"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]={{D,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceInitFailed:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}}
},
},
["err_reference_bind_init_list"]={
["err_reference_bind_init_list"]={
Line 2,322: Line 2,322:
[j]=o,
[j]=o,
[c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."},
[c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences."},
[k]={{D,8298,"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]={{D,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceBindingToInitList:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}
},
},
["err_reference_bind_temporary_addrspace"]={
["err_reference_bind_temporary_addrspace"]={
Line 2,334: Line 2,334:
[j]=o,
[j]=o,
[c]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries"},
[c]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries"},
[k]={{D,8234,"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]={{D,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}}
},
},
["err_reference_bind_to_bitfield"]={
["err_reference_bind_to_bitfield"]={
Line 2,346: Line 2,346:
[j]=o,
[j]=o,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,zb},
[k]={{D,8215,"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]={{D,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}}
},
},
["err_reference_bind_to_matrix_element"]={
["err_reference_bind_to_matrix_element"]={
Line 2,358: Line 2,358:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{D,8226,"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]={{D,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}
},
},
["err_reference_bind_to_vector_element"]={
["err_reference_bind_to_vector_element"]={
Line 2,370: Line 2,370:
[j]=o,
[j]=o,
[c]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element."},
[c]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element."},
[k]={{D,8222,"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]={{D,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}
},
},
["err_reference_capture_with_reference_default"]={
["err_reference_capture_with_reference_default"]={
Line 2,382: Line 2,382:
[j]="Lambda Issue",
[j]="Lambda Issue",
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures."},
[k]={{yb,962,"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]={{yb,1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Init.isUsable()) {\n    } else {\n      // C++11 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is &, the\n      //  identifiers in the lambda-capture shall not be preceded by &.\n      //  If a lambda-capture includes a capture-default that is =, [...]\n      //  each identifier it contains shall be preceded by &.\n      if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n        Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}}
},
},
["err_reference_has_multiple_inits"]={
["err_reference_has_multiple_inits"]={
Line 2,394: Line 2,394:
[j]=o,
[j]=o,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,zb},
[k]={{D,8116,"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]={{D,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n    if (Args.empty()) {\n    } else // FIXME: diagnostic below could be better!\n      S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}}
},
},
["err_reference_pipe_type"]={
["err_reference_pipe_type"]={
Line 2,406: Line 2,406:
[j]=o,
[j]=o,
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"},
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support"},
[k]={{t,9379,"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]={{t,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\n    // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n    // types.\n    if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n      if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}}
},
},
["err_reference_to_function_with_unsatisfied_constraints"]={
["err_reference_to_function_with_unsatisfied_constraints"]={
Line 2,418: Line 2,418:
[j]=o,
[j]=o,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{p,275,"/// 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]={{p,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    // [expr.prim.id]p4\n    //  A program that refers explicitly or implicitly to a function with a\n    //  trailing requires-clause whose constraint-expression is not satisfied,\n    //  other than to declare it, is ill-formed. [...]\n    //\n    // See if this is a function with constraints that need to be satisfied.\n    // Check this before deducing the return type, as it might instantiate the\n    // definition.\n    if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}}
},
},
["err_reference_to_local_in_enclosing_context"]={
["err_reference_to_local_in_enclosing_context"]={
Line 2,430: Line 2,430:
[j]=o,
[j]=o,
[c]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG"},
[c]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG"},
[k]={{p,16557,"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]={{p,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}}
},
},
["err_reference_to_void"]={
["err_reference_to_void"]={
Line 2,442: Line 2,442:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{F,2003,"/// 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]={{F,2270,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n  // C++ [dcl.ref]p1:\n  //  A declarator that specifies the type \"reference to cv void\"\n  //  is ill-formed.\n  if (T->isVoidType()) {\n    Diag(Loc, diag::err_reference_to_void);"}}
},
},
["err_reference_var_requires_init"]={
["err_reference_var_requires_init"]={
Line 2,454: Line 2,454:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{t,12085,"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]={{t,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with reference type.\n    if (Type->isReferenceType()) {\n      Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}}
},
},
["err_reference_without_init"]={
["err_reference_without_init"]={
Line 2,466: Line 2,466:
[j]=o,
[j]=o,
[c]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"},
[c]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"},
[k]={{D,8002,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  if (T->isReferenceType()) {\n    S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}}
[k]={{D,9431,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  if (T->isReferenceType()) {\n    S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}}
},
},
["err_regparm_mismatch"]={
["err_regparm_mismatch"]={
Line 2,478: Line 2,478:
[j]=o,
[j]=o,
[c]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a"},
[c]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a"},
[k]={{t,3442,"/// 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]={{t,3831,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Merge regparm attribute.\n  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n    if (NewTypeInfo.getHasRegParm()) {\n      Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}}
},
},
["err_relocatable_without_isysroot"]={
["err_relocatable_without_isysroot"]={
Line 2,490: Line 2,490:
[j]=a,
[j]=a,
[c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."},
[c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name."},
[k]={{"clang/lib/Frontend/FrontendActions.cpp",122,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
[k]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
},
},
["err_repeat_attribute"]={
["err_repeat_attribute"]={
Line 2,502: Line 2,502:
[j]=o,
[j]=o,
[c]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override."},
[c]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override."},
[k]={{O,2050,"// 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]={{O,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}}
},
},
["err_require_constant_init_failed"]={
["err_require_constant_init_failed"]={
Line 2,514: Line 2,514:
[j]=o,
[j]=o,
[c]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[c]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[k]={{t,12428,"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]={{t,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}}
},
},
["err_requires_clause_inside_parens"]={
["err_requires_clause_inside_parens"]={
Line 2,526: Line 2,526:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{R,6081,"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]={{R,6714,"PastIdentifier:\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::l_square)) {\n    } else if (Tok.isRegularKeywordAttribute()) {\n    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}}
},
},
["err_requires_clause_must_appear_after_trailing_return"]={
["err_requires_clause_must_appear_after_trailing_return"]={
Line 2,538: Line 2,538:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{bb,3601,"/// 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]={{bb,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // Did the user swap the trailing return type and requires clause?\n  if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}}
},
},
["err_requires_clause_on_declarator_not_declaring_a_function"]={
["err_requires_clause_on_declarator_not_declaring_a_function"]={
Line 2,550: Line 2,550:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{R,6658,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (Tok.is(tok::kw_requires)) {\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{bb,3585,"/// 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]={{R,7375,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (Tok.is(tok::kw_requires)) {\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{bb,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}}
},
},
["err_requires_expr_expected_type_constraint"]={
["err_requires_expr_expected_type_constraint"]={
Line 2,562: Line 2,562:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{cb,3239,"/// 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]={{cb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      case tok::l_brace: {\n        if (!isTypeConstraintAnnotation()) {\n          Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}}
},
},
["err_requires_expr_in_simple_requirement"]={
["err_requires_expr_in_simple_requirement"]={
Line 2,574: Line 2,574:
[j]=u,
[j]=u,
[c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."},
[k]={{cb,3371,"/// 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]={{cb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      default: {\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}}
},
},
["err_requires_expr_local_parameter_default_argument"]={
["err_requires_expr_local_parameter_default_argument"]={
Line 2,586: Line 2,586:
[j]=o,
[j]=o,
[c]={kb,1576172311,lb},
[c]={kb,1576172311,lb},
[k]={{E,7903,"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]={{E,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  for (ParmVarDecl *Param : LocalParameters) {\n    if (Param->hasDefaultArg())\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}}
},
},
["err_requires_expr_missing_arrow"]={
["err_requires_expr_missing_arrow"]={
Line 2,598: Line 2,598:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{cb,3232,"/// 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]={{cb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      case tok::l_brace: {\n        if (!TryConsumeToken(tok::arrow))\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}}
},
},
["err_requires_expr_parameter_list_ellipsis"]={
["err_requires_expr_parameter_list_ellipsis"]={
Line 2,610: Line 2,610:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{cb,3163,"/// 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]={{cb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  if (Tok.is(tok::l_paren)) {\n    if (!Tok.is(tok::r_paren)) {\n      if (EllipsisLoc.isValid())\n        Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}}
},
},
["err_requires_expr_parameter_referenced_in_evaluated_context"]={
["err_requires_expr_parameter_referenced_in_evaluated_context"]={
Line 2,622: Line 2,622:
[j]=o,
[j]=o,
[c]={kb,1576172311,lb},
[c]={kb,1576172311,lb},
[k]={{p,362,"/// 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]={{p,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}}
},
},
["err_requires_expr_simple_requirement_noexcept"]={
["err_requires_expr_simple_requirement_noexcept"]={
Line 2,634: Line 2,634:
[j]=u,
[j]=u,
[c]={fb,1570627358,gb},
[c]={fb,1570627358,gb},
[k]={{cb,3380,"/// 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]={{cb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  if (Tok.is(tok::r_brace)) {\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      default: {\n        // User may have tried to put some compound requirement stuff here\n        if (Tok.is(tok::kw_noexcept)) {\n          Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}}
},
},
["err_restricted_superclass_mismatch"]={
["err_restricted_superclass_mismatch"]={
Line 2,646: Line 2,646:
[j]=o,
[j]=o,
[c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"},
[c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute"},
[k]={{Y,3422,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{Y,3451,"// 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]={{Y,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{Y,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}}
},
},
["err_ret_local_block"]={
["err_ret_local_block"]={
Line 2,658: Line 2,658:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{D,7036,"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]={{D,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}}
},
},
["err_rethrow_used_outside_catch"]={
["err_rethrow_used_outside_catch"]={
Line 2,670: Line 2,670:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{K,3697,"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]={{K,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  if (!Throw) {\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}}
},
},
["err_return_block_has_expr"]={
["err_return_block_has_expr"]={
Line 2,682: Line 2,682:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{K,3170,"/// 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]={{K,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // Otherwise, verify that this result type matches the previous one.  We are\n  // pickier with blocks than for normal functions because we don\'t have GCC\n  // compatibility to worry about here.\n  if (FnRetType->isDependentType()) {\n  } else if (FnRetType->isVoidType()) {\n    if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n      if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
},
},
["err_return_in_captured_stmt"]={
["err_return_in_captured_stmt"]={
Line 2,694: Line 2,694:
[j]=o,
[j]=o,
[c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"},
[c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements"},
[k]={{K,3149,"/// 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]={{K,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}}
},
},
["err_return_in_constructor_handler"]={
["err_return_in_constructor_handler"]={
Line 2,706: Line 2,706:
[j]=o,
[j]=o,
[c]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ..."},
[c]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ..."},
[k]={{y,15334,"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]={{y,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}}
},
},
["err_return_in_coroutine"]={
["err_return_in_coroutine"]={
Line 2,718: Line 2,718:
[j]="Coroutines Issue",
[j]="Coroutines Issue",
[c]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[c]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1008,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}}
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}}
},
},
["err_return_init_list"]={
["err_return_init_list"]={
Line 2,730: Line 2,730:
[j]=o,
[j]=o,
[c]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers."},
[c]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers."},
[k]={{K,3503,"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]={{K,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}}
},
},
["err_return_value_with_address_space"]={
["err_return_value_with_address_space"]={
Line 2,742: Line 2,742:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{t,8979,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{t,9007,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().HLSL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{yb,759,"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]={{t,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{t,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().HLSL) {\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{yb,876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  } else {\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      if (!RetTy.isNull()) {\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}}
},
},
["err_right_angle_bracket_equal_needs_space"]={
["err_right_angle_bracket_equal_needs_space"]={
Line 2,754: Line 2,754:
[j]=u,
[j]=u,
[c]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to"},
[c]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to"},
[k]={{rb,1050,"/// 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]={{rb,1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}}
},
},
["err_riscv_builtin_invalid_lmul"]={
["err_riscv_builtin_invalid_lmul"]={
Line 2,766: Line 2,766:
[j]=a,
[j]=a,
[c]={pb,1615397021,ub},
[c]={pb,1615397021,ub},
[k]={{v,4187,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}}
[k]={{v,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}}
},
},
["err_riscv_builtin_requires_extension"]={
["err_riscv_builtin_requires_extension"]={
Line 2,778: Line 2,778:
[j]=a,
[j]=a,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{v,4232,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{v,4298,"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]={{v,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{v,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}}
},
},
["err_riscv_type_requires_extension"]={
["err_riscv_type_requires_extension"]={
Line 2,790: Line 2,790:
[j]=a,
[j]=a,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{v,5127,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n  // least zve64x\n  if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{v,5129,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{v,5131,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{v,5133,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{v,5137,"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]={{v,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n  // least zve64x\n  if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{v,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{v,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{v,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{v,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // Given that caller already checked isRVVType() before calling this function,\n  // if we don\'t have at least zve32x supported, then we need to emit error.\n  if (!TI.hasFeature(\"zve32x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}}
},
},
["err_root_class_cannot_use_super"]={
["err_root_class_cannot_use_super"]={
Line 2,802: Line 2,802:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{db,1757,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  if (!IFace) {\n    // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n    // property reference.\n    if (receiverNamePtr->isStr(\"super\")) {\n      if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n        if (auto classDecl = CurMethod->getClassInterface()) {\n          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{db,1946,"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]={{db,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  if (!IFace) {\n    // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n    // property reference.\n    if (receiverNamePtr->isStr(\"super\")) {\n      if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n        if (auto classDecl = CurMethod->getClassInterface()) {\n          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{db,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  if (SuperTy.isNull()) {\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}}
},
},
["err_roptr_cannot_build_shared"]={
["err_roptr_cannot_build_shared"]={
Line 2,814: Line 2,814:
[j]=a,
[j]=a,
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[k]={{"clang/lib/Driver/ToolChains/AIX.cpp",126,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n    if (Args.hasArg(options::OPT_shared))\n      D.Diag(diag::err_roptr_cannot_build_shared);"}}
[k]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n    if (Args.hasArg(options::OPT_shared))\n      D.Diag(diag::err_roptr_cannot_build_shared);"}}
},
},
["err_roptr_requires_data_sections"]={
["err_roptr_requires_data_sections"]={
Line 2,826: Line 2,826:
[j]=a,
[j]=a,
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers"},
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",667,"#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",1587,"#include \"clang/Driver/Options.inc\"\n  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n    // Since the storage mapping class is specified per csect,\n    // without using data sections, it is less effective to use read-only\n    // pointers. Using read-only pointers may cause other RO variables in the\n    // same csect to become RW when the linker acts upon `-bforceimprw`;\n    // therefore, we require that separate data sections\n    // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n    // data-sections since we have not found reasons to do otherwise that\n    // overcome the user surprise of not respecting the setting.\n    if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n      Diags.Report(diag::err_roptr_requires_data_sections);"}}
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n    if (HasRoptr) {\n      // The data sections option is on by default on AIX. We only need to error\n      // out when -fno-data-sections is specified explicitly to turn off data\n      // sections.\n      if (DataSectionsTurnedOff)\n        D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n    // Since the storage mapping class is specified per csect,\n    // without using data sections, it is less effective to use read-only\n    // pointers. Using read-only pointers may cause other RO variables in the\n    // same csect to become RW when the linker acts upon `-bforceimprw`;\n    // therefore, we require that separate data sections\n    // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n    // data-sections since we have not found reasons to do otherwise that\n    // overcome the user surprise of not respecting the setting.\n    if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n      Diags.Report(diag::err_roptr_requires_data_sections);"}}
},
},
["err_rotation_argument_to_cadd"]={
["err_rotation_argument_to_cadd"]={
Line 2,838: Line 2,838:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{v,2667,"#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]={{v,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  for (auto &I : ImmChecks) {\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}}
},
},
["err_rotation_argument_to_cmla"]={
["err_rotation_argument_to_cmla"]={
Line 2,850: Line 2,850:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{v,2671,"#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]={{v,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  for (auto &I : ImmChecks) {\n    case SVETypeFlags::ImmCheckComplexRotAll90:\n      if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}}
},
},
["err_rref_in_exception_spec"]={
["err_rref_in_exception_spec"]={
Line 2,862: Line 2,862:
[j]=o,
[j]=o,
[c]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications."},
[c]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications."},
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",138,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  if (const PointerType *PT = T->getAs<PointerType>()) {\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    if (RT->isRValueReferenceType()) {\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}}
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  if (const PointerType *PT = T->getAs<PointerType>()) {\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    if (RT->isRValueReferenceType()) {\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}}
},
},
["err_sampler_argument_required"]={
["err_sampler_argument_required"]={
Line 2,874: Line 2,874:
[j]=o,
[j]=o,
[c]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."},
[c]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."},
[k]={{D,7903,"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]={{D,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_OCLSamplerInit: {\n      // Case 1\n      if (Entity.isParameterKind()) {\n        if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
},
},
["err_sampler_initializer_not_integer"]={
["err_sampler_initializer_not_integer"]={
Line 2,886: Line 2,886:
[j]=o,
[j]=o,
[c]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"},
[c]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"},
[k]={{D,7934,"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]={{D,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_OCLSamplerInit: {\n      // Case 1\n      if (Entity.isParameterKind()) {\n      } else {\n        if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}}
},
},
["err_scoped_enum_missing_identifier"]={
["err_scoped_enum_missing_identifier"]={
Line 2,898: Line 2,898:
[j]=u,
[j]=u,
[c]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"},
[c]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a"},
[k]={{R,4415,"/// 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]={{R,4873,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  if (!Name && ScopedEnumKWLoc.isValid()) {\n    Diag(Tok, diag::err_scoped_enum_missing_identifier);"}}
},
},
["err_second_argument_to_cwsc_not_pointer"]={
["err_second_argument_to_cwsc_not_pointer"]={
Line 2,910: Line 2,910:
[j]=o,
[j]=o,
[c]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension."},
[c]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension."},
[k]={{v,670,"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]={{v,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n  if (!ChainResult.get()->getType()->isPointerType()) {\n    S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}}
},
},
["err_second_parameter_to_va_arg_abstract"]={
["err_second_parameter_to_va_arg_abstract"]={
Line 2,922: Line 2,922:
[j]=o,
[j]=o,
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[k]={{p,14955,"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]={{p,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}}
},
},
["err_second_parameter_to_va_arg_incomplete"]={
["err_second_parameter_to_va_arg_incomplete"]={
Line 2,934: Line 2,934:
[j]=o,
[j]=o,
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg"},
[k]={{p,14952,"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]={{p,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}}
},
},
["err_section_conflict"]={
["err_section_conflict"]={
Line 2,946: Line 2,946:
[j]=o,
[j]=o,
[c]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas"},
[c]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas"},
[k]={{B,587,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{B,604,"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]={{B,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{B,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}}
},
},
["err_seh___except_block"]={
["err_seh___except_block"]={
Line 2,958: Line 2,958:
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{Z,504,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{Z,505,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{Z,506,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{v,2193,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_code:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}}
[k]={{Z,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{Z,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{Z,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{v,2470,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_code:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}}
},
},
["err_seh___except_filter"]={
["err_seh___except_filter"]={
Line 2,970: Line 2,970:
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{Z,507,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{Z,508,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{Z,509,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{v,2198,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_info:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}}
[k]={{Z,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{Z,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{Z,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{v,2476,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI_exception_info:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}}
},
},
["err_seh___finally_block"]={
["err_seh___finally_block"]={
Line 2,982: Line 2,982:
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{Z,510,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{Z,511,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{Z,512,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}}
[k]={{Z,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{Z,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{Z,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  if (getLangOpts().Borland) {\n    PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}}
},
},
["err_seh_expected_handler"]={
["err_seh_expected_handler"]={
Line 2,994: Line 2,994:
[j]=a,
[j]=a,
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling"},
[k]={{mb,569,"/// 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]={{mb,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n///  \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n///  seh-except-block\n///  seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n  if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n  } else if (Tok.is(tok::kw___finally)) {\n  } else {\n    return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}}
},
},
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
Line 3,006: Line 3,006:
[j]="Coroutines Issue",
[j]="Coroutines Issue",
[c]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch"},
[c]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch"},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1506,"bool CoroutineStmtBuilder::makeOnException() {\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}}
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}}
},
},
["err_seh_try_outside_functions"]={
["err_seh_try_outside_functions"]={
Line 3,018: Line 3,018:
[j]=o,
[j]=o,
[c]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality"},
[c]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality"},
[k]={{K,3963,"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]={{K,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  if (FD)\n  else\n    Diag(TryLoc, diag::err_seh_try_outside_functions);"}}
},
},
["err_seh_try_unsupported"]={
["err_seh_try_unsupported"]={
Line 3,030: Line 3,030:
[j]=o,
[j]=o,
[c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"},
[c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try"},
[k]={{K,3967,"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]={{K,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // Reject __try on unsupported targets.\n  if (!Context.getTargetInfo().isSEHTrySupported())\n    Diag(TryLoc, diag::err_seh_try_unsupported);"}}
},
},
["err_selected_explicit_constructor"]={
["err_selected_explicit_constructor"]={
Line 3,042: Line 3,042:
[j]=o,
[j]=o,
[c]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120."},
[c]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120."},
[k]={{D,8410,"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]={{D,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ExplicitConstructor: {\n    S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}}
},
},
["err_selector_element_const_type"]={
["err_selector_element_const_type"]={
Line 3,054: Line 3,054:
[j]=o,
[j]=o,
[c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"},
[c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in"},
[k]={{K,2043,"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]={{K,2345,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    } else {\n      if (FirstType.isConstQualified())\n        Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}}
},
},
["err_selector_element_not_lvalue"]={
["err_selector_element_not_lvalue"]={
Line 3,066: Line 3,066:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{K,2039,"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]={{K,2340,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    } else {\n      if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n        return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}}
},
},
["err_selector_element_type"]={
["err_selector_element_type"]={
Line 3,078: Line 3,078:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{K,2046,"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]={{K,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n      return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}}
},
},
["err_setter_type_void"]={
["err_setter_type_void"]={
Line 3,090: Line 3,090:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{Q,1946,"/// 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]={{Q,2446,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n      Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}}
},
},
["err_setting_eval_method_used_in_unsafe_context"]={
["err_setting_eval_method_used_in_unsafe_context"]={
Line 3,102: Line 3,102:
[j]=o,
[j]=o,
[c]={qb,1620118562,vb},
[c]={qb,1620118562,vb},
[k]={{B,448,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().ApproxFunc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{B,450,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowFPReassoc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{B,452,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowRecip)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{B,1117,"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]={{B,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().ApproxFunc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{B,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowFPReassoc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{B,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  if (getLangOpts().AllowRecip)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{B,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n  if (IsEnabled) {\n    if (Reason != -1)\n      Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}}
},
},
["err_shared_var_init"]={
["err_shared_var_init"]={
Line 3,114: Line 3,114:
[j]=o,
[j]=o,
[c]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables."},
[c]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables."},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",560,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n    Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}}
[k]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n    Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}}
},
},
["err_shift_rhs_only_vector"]={
["err_shift_rhs_only_vector"]={
Line 3,126: Line 3,126:
[j]=o,
[j]=o,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[k]={{p,10422,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n  if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n    S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[k]={{p,12103,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n  if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n    S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_shufflevector_argument_too_large"]={
["err_shufflevector_argument_too_large"]={
Line 3,138: Line 3,138:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,7963,"/// 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]={{v,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}}
},
},
["err_shufflevector_nonconstant_argument"]={
["err_shufflevector_nonconstant_argument"]={
Line 3,150: Line 3,150:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,7956,"/// 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]={{v,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->getSourceRange());"}}
},
},
["err_single_decl_assign_in_for_range"]={
["err_single_decl_assign_in_for_range"]={
Line 3,162: Line 3,162:
[j]=u,
[j]=u,
[c]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration"},
[c]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration"},
[k]={{R,2297,"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]={{R,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    if (Tok.is(tok::kw_delete)) {\n    } else if (Tok.is(tok::kw_default)) {\n    } else {\n      // If this is the only decl in (possibly) range based for statement,\n      // our best guess is that the user meant \':\' instead of \'=\'.\n      if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n        Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}}
},
},
["err_size_t_literal_too_large"]={
["err_size_t_literal_too_large"]={
Line 3,174: Line 3,174:
[j]=a,
[j]=a,
[c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[k]={{p,3698,"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]={{p,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n  } else if (!Literal.isIntegerLiteral()) {\n  } else {\n    if (Literal.GetIntegerValue(ResultVal)) {\n    } else {\n      // If we still couldn\'t decide a type, we either have \'size_t\' literal\n      // that is out of range, or a decimal literal that does not fit in a\n      // signed long long and has no U suffix.\n      if (Ty.isNull()) {\n        if (Literal.isSizeT)\n          Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}}
},
},
["err_sizeless_in_exception_spec"]={
["err_sizeless_in_exception_spec"]={
Line 3,186: Line 3,186:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",168,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // The MSVC compatibility mode doesn\'t extend to sizeless types,\n  // so diagnose them separately.\n  if (PointeeT->isSizelessType() && Kind != 1) {\n    Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}}
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // The MSVC compatibility mode doesn\'t extend to sizeless types,\n  // so diagnose them separately.\n  if (PointeeT->isSizelessType() && Kind != 1) {\n    Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}}
},
},
["err_sizeless_nonlocal"]={
["err_sizeless_nonlocal"]={
Line 3,198: Line 3,198:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{t,7723,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}}
[k]={{t,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}}
},
},
["err_sizeof_alignof_function_type"]={
["err_sizeof_alignof_function_type"]={
Line 3,210: Line 3,210:
[j]=o,
[j]=o,
[c]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++."},
[c]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++."},
[k]={{p,3849,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (ExprTy->isFunctionType()) {\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{p,4098,"/// 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]={{p,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (ExprTy->isFunctionType()) {\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{p,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  if (ExprType->isFunctionType()) {\n    Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}}
},
},
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
Line 3,222: Line 3,222:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,3837,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n    if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{p,3840,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else {\n    if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{p,4094,"/// 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]={{p,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n    if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{p,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else {\n    if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{p,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}}
},
},
["err_sizeof_alignof_typeof_bitfield"]={
["err_sizeof_alignof_typeof_bitfield"]={
Line 3,234: Line 3,234:
[j]=o,
[j]=o,
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"},
[k]={{p,3886,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (E->getObjectKind() == OK_BitField) {\n    S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{p,4177,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n  if (E->isTypeDependent()) {\n  } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else if (ExprKind == UETT_VecStep) {\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n  } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{F,8324,"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]={{p,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  if (E->getObjectKind() == OK_BitField) {\n    S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{p,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n  if (E->isTypeDependent()) {\n  } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  } else if (ExprKind == UETT_VecStep) {\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n  } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{F,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n  if (!getLangOpts().CPlusPlus && E->refersToBitField())\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}}
},
},
["err_sizeof_nonfragile_interface"]={
["err_sizeof_nonfragile_interface"]={
Line 3,246: Line 3,246:
[j]=o,
[j]=o,
[c]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when"},
[c]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when"},
[k]={{p,3769,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // Reject sizeof(interface) and sizeof(interface<proto>) if the\n  // runtime doesn\'t allow it.\n  if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n    S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}}
[k]={{p,4348,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // Reject sizeof(interface) and sizeof(interface<proto>) if the\n  // runtime doesn\'t allow it.\n  if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n    S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}}
},
},
["err_sizeof_pack_no_pack_name"]={
["err_sizeof_pack_no_pack_name"]={
Line 3,258: Line 3,258:
[j]=o,
[j]=o,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",931,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  if (!ParameterPack || !ParameterPack->isParameterPack()) {\n    Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}}
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  if (!ParameterPack || !ParameterPack->isParameterPack()) {\n    Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}}
},
},
["err_sizeof_pack_no_pack_name_suggest"]={
["err_sizeof_pack_no_pack_name_suggest"]={
Line 3,270: Line 3,270:
[j]=o,
[j]=o,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",916,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}
[k]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}
},
},
["err_sizeof_parameter_pack"]={
["err_sizeof_parameter_pack"]={
Line 3,282: Line 3,282:
[j]=u,
[j]=u,
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a"},
[k]={{"clang/lib/Parse/ParseExpr.cpp",2240,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::identifier)) {\n    } else {\n      Diag(Tok, diag::err_sizeof_parameter_pack);"}}
[k]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    if (Tok.is(tok::l_paren)) {\n    } else if (Tok.is(tok::identifier)) {\n    } else {\n      Diag(Tok, diag::err_sizeof_parameter_pack);"}}
},
},
["err_sls_hardening_arm_not_supported"]={
["err_sls_hardening_arm_not_supported"]={
Line 3,294: Line 3,294:
[j]=a,
[j]=a,
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{nb,822,"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]={{nb,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Enable/disable straight line speculation hardening.\n  if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n    if (EnableRetBr || EnableBlr)\n      if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n        D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}}
},
},
["err_spaceship_argument_narrowing"]={
["err_spaceship_argument_narrowing"]={
Line 3,306: Line 3,306:
[j]=a,
[j]=a,
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[k]={{p,11023,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Constant_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{p,11030,"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]={{p,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Constant_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{p,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  case NK_Type_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}}
},
},
["err_spec_member_not_instantiated"]={
["err_spec_member_not_instantiated"]={
Line 3,318: Line 3,318:
[j]=o,
[j]=o,
[c]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep"},
[c]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep"},
[k]={{q,8000,"/// 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]={{q,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}}
},
},
["err_specialization_after_instantiation"]={
["err_specialization_after_instantiation"]={
Line 3,330: Line 3,330:
[j]=o,
[j]=o,
[c]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[c]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[k]={{q,3900,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{q,7273,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{q,7552,"/// 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]={{q,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{q,8879,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{q,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitSpecialization:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}}
},
},
["err_specialization_not_primary_template"]={
["err_specialization_not_primary_template"]={
Line 3,342: Line 3,342:
[j]=o,
[j]=o,
[c]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple."},
[c]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple."},
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",5199,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n    while (!DC->isFileContext()) {\n      // Move to the outer template scope.\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n        if (Guide && Guide->isImplicit()) {\n          // Check that this template-id names the primary template and not a\n          // partial or explicit specialization. (In the latter cases, it\'s\n          // meaningless to attempt to find an instantiation of D within the\n          // specialization.)\n          // FIXME: The standard doesn\'t say what should happen here.\n          if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n            Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n    while (!DC->isFileContext()) {\n      // Move to the outer template scope.\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n        if (Guide && Guide->isImplicit()) {\n          // Check that this template-id names the primary template and not a\n          // partial or explicit specialization. (In the latter cases, it\'s\n          // meaningless to attempt to find an instantiation of D within the\n          // specialization.)\n          // FIXME: The standard doesn\'t say what should happen here.\n          if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n            Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
},
},
["err_specialize_member_of_template"]={
["err_specialize_member_of_template"]={
Line 3,354: Line 3,354:
[j]=o,
[j]=o,
[c]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"},
[c]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits"},
[k]={{q,2830,"/// 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]={{q,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n    if (SawNonEmptyTemplateParameterList) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}}
},
},
["err_stack_tagging_requires_hardware_feature"]={
["err_stack_tagging_requires_hardware_feature"]={
Line 3,366: Line 3,366:
[j]=a,
[j]=a,
[c]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"},
[c]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"},
[k]={{"clang/lib/Driver/SanitizerArgs.cpp",1044,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n    TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}}
[k]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n    TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}}
},
},
["err_standalone_class_nested_name_specifier"]={
["err_standalone_class_nested_name_specifier"]={
Line 3,378: Line 3,378:
[j]=o,
[j]=o,
[c]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."},
[c]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."},
[k]={{t,4598,"/// 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]={{t,5157,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n    Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}}
},
},
["err_static_assert_expression_is_not_constant"]={
["err_static_assert_expression_is_not_constant"]={
Line 3,390: Line 3,390:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{y,14580,"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]={{y,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}}
},
},
["err_static_assert_failed"]={
["err_static_assert_failed"]={
Line 3,402: Line 3,402:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{y,14611,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{y,14619,"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]={{y,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{y,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n      } else {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}}
},
},
["err_static_assert_invalid_mem_fn_ret_ty"]={
["err_static_assert_invalid_mem_fn_ret_ty"]={
Line 3,414: Line 3,414:
[j]=o,
[j]=o,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,14486,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n    default:\n      if (Diag)\n        Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{y,14527,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedSize.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{y,14533,"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]={{y,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n    default:\n      if (Diag)\n        Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{y,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedSize.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{y,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (EvaluatedData.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}}
},
},
["err_static_assert_invalid_message"]={
["err_static_assert_invalid_message"]={
Line 3,426: Line 3,426:
[j]=o,
[j]=o,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,14464,"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]={{y,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (!RD) {\n    Diag(Loc, diag::err_static_assert_invalid_message);"}}
},
},
["err_static_assert_message_constexpr"]={
["err_static_assert_message_constexpr"]={
Line 3,438: Line 3,438:
[j]=o,
[j]=o,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,14544,"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]={{y,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n    Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}}
},
},
["err_static_assert_missing_member_function"]={
["err_static_assert_missing_member_function"]={
Line 3,450: Line 3,450:
[j]=o,
[j]=o,
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{y,14495,"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]={{y,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  if (SizeNotFound || DataNotFound) {\n    Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}}
},
},
["err_static_assert_requirement_failed"]={
["err_static_assert_requirement_failed"]={
Line 3,462: Line 3,462:
[j]=o,
[j]=o,
[c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."},
[c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert."},
[k]={{y,14616,"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]={{y,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n        Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}}
},
},
["err_static_block_func"]={
["err_static_block_func"]={
Line 3,474: Line 3,474:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,8032,"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]={{t,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_static: {\n    if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n      SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}}
},
},
["err_static_data_member_not_allowed_in_anon_struct"]={
["err_static_data_member_not_allowed_in_anon_struct"]={
Line 3,486: Line 3,486:
[j]=o,
[j]=o,
[c]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[c]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[k]={{t,6760,"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]={{t,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n        } else if (AnonStruct) {\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}}
},
},
["err_static_data_member_not_allowed_in_local_class"]={
["err_static_data_member_not_allowed_in_local_class"]={
Line 3,498: Line 3,498:
[j]=o,
[j]=o,
[c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."},
[c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4."},
[k]={{t,6755,"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]={{t,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}}
},
},
["err_static_data_member_reinitialization"]={
["err_static_data_member_reinitialization"]={
Line 3,510: Line 3,510:
[j]=o,
[j]=o,
[c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"},
[c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static"},
[k]={{t,11565,"/// 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]={{t,13249,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n    //  in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}}
},
},
["err_static_downcast_via_virtual"]={
["err_static_downcast_via_virtual"]={
Line 3,522: Line 3,522:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{eb,1477,"/// 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]={{eb,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  if (Paths.getDetectedVirtual() != nullptr) {\n    Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}}
},
},
["err_static_function_scope"]={
["err_static_function_scope"]={
Line 3,534: Line 3,534:
[j]=o,
[j]=o,
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[k]={{t,7547,"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]={{t,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n  // scope.\n  if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n    Diag(NewVD->getLocation(), diag::err_static_function_scope);"}}
},
},
["err_static_illegal_in_new"]={
["err_static_illegal_in_new"]={
Line 3,546: Line 3,546:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{E,1636,"/// 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]={{E,1866,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    if (Chunk.Arr.hasStatic)\n      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}}
},
},
["err_static_kernel"]={
["err_static_kernel"]={
Line 3,558: Line 3,558:
[j]=o,
[j]=o,
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2."},
[k]={{t,9327,"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]={{t,10691,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n    if (SC == SC_Static) {\n      Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}}
},
},
["err_static_lambda"]={
["err_static_lambda"]={
Line 3,572: Line 3,572:
[j]=u,
[j]=u,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{cb,1107,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}}
[k]={{cb,1210,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}}
},
},
["err_static_lambda_captures"]={
["err_static_lambda_captures"]={
Line 3,584: Line 3,584:
[j]=u,
[j]=u,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{cb,1147,"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]={{cb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  if (Intro.hasLambdaCapture()) {\n    P.Diag(StaticLoc, diag::err_static_lambda_captures);"}}
},
},
["err_static_main"]={
["err_static_main"]={
Line 3,596: Line 3,596:
[j]=o,
[j]=o,
[c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."},
[c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."},
[k]={{t,10532,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //  A program that [...] declares main to be inline, static or\n  //  constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //  appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}
[k]={{t,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //  A program that [...] declares main to be inline, static or\n  //  constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //  appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}
},
},
["err_static_mutable_lambda"]={
["err_static_mutable_lambda"]={
Line 3,608: Line 3,608:
[j]=u,
[j]=u,
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{cb,1145,"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]={{cb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // [expr.prim.lambda.general] p4\n  // The lambda-specifier-seq shall not contain both mutable and static.\n  // If the lambda-specifier-seq contains static, there shall be no\n  // lambda-capture.\n  if (MutableLoc.isValid())\n    P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}}
},
},
["err_static_non_static"]={
["err_static_non_static"]={
Line 3,620: Line 3,620:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,3325,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Don\'t complain about this if we\'re in GNU89 mode and the old function\n  // is an extern inline function.\n  // Don\'t complain about specializations. They are not supposed to have\n  // storage classes.\n  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New;"},{t,4143,"/// 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]={{t,3702,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // Don\'t complain about this if we\'re in GNU89 mode and the old function\n  // is an extern inline function.\n  // Don\'t complain about specializations. They are not supposed to have\n  // storage classes.\n  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New;"},{t,4633,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n  if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n    if (getLangOpts().MicrosoftExt) {\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}}
},
},
["err_static_not_bitfield"]={
["err_static_not_bitfield"]={
Line 3,632: Line 3,632:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{y,3085,"/// 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]={{y,3626,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n  } else {\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n        Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}}
},
},
["err_static_out_of_line"]={
["err_static_out_of_line"]={
Line 3,644: Line 3,644:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,6718,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Static:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{t,8809,"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]={{t,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Static:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{t,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n      Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}
},
},
["err_static_overrides_virtual"]={
["err_static_overrides_virtual"]={
Line 3,656: Line 3,656:
[j]=o,
[j]=o,
[c]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function"},
[c]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function"},
[k]={{y,5994,"/// 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]={{y,7018,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // A static function cannot override anything.\n    if (MD->getStorageClass() == SC_Static) {\n      if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}}
},
},
["err_statically_allocated_object"]={
["err_statically_allocated_object"]={
Line 3,668: Line 3,668:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{t,7529,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{t,16541,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n    } else if (FDTy->isObjCObjectType()) {\n      Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{Q,494,"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]={{t,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{t,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n    } else if (FDTy->isObjCObjectType()) {\n      Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{Q,608,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  if (T->isObjCObjectType()) {\n    Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}}
},
},
["err_std_compare_type_not_supported"]={
["err_std_compare_type_not_supported"]={
Line 3,680: Line 3,680:
[j]=a,
[j]=a,
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant"},
[k]={{y,9958,"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]={{y,11591,"struct InvalidSTLDiagnoser {\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    {\n      auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}}
},
},
["err_std_source_location_impl_malformed"]={
["err_std_source_location_impl_malformed"]={
Line 3,692: Line 3,692:
[j]=a,
[j]=a,
[c]={qb,1620118562,vb},
[c]={qb,1620118562,vb},
[k]={{p,15055,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // Verify that __impl is a trivial struct type, with no base classes, and with\n  // only the four expected fields.\n  if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{p,15085,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (Count != 4) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}}
[k]={{p,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // Verify that __impl is a trivial struct type, with no base classes, and with\n  // only the four expected fields.\n  if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{p,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (Count != 4) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}}
},
},
["err_std_source_location_impl_not_found"]={
["err_std_source_location_impl_not_found"]={
Line 3,704: Line 3,704:
[j]=a,
[j]=a,
[c]={qb,1620118562,vb},
[c]={qb,1620118562,vb},
[k]={{p,15048,"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]={{p,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n    S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}}
},
},
["err_std_type_trait_not_class_template"]={
["err_std_type_trait_not_class_template"]={
Line 3,716: Line 3,716:
[j]=o,
[j]=o,
[c]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[c]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[k]={{y,902,"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]={{y,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  if (!TraitTD) {\n    S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}}
},
},
["err_stmt_expr_in_default_arg"]={
["err_stmt_expr_in_default_arg"]={
Line 3,728: Line 3,728:
[j]=o,
[j]=o,
[c]={qb,1620118562,vb},
[c]={qb,1620118562,vb},
[k]={{R,6740,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    } else {\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        } else {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n          } else {\n            if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n              Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{rb,910,"/// 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]={{R,7470,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    } else {\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        } else {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n          } else {\n            if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n              Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{rb,1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n///      template-parameter:\n///        ...\n///        parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n      Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}}
},
},
["err_stmtexpr_file_scope"]={
["err_stmtexpr_file_scope"]={
Line 3,740: Line 3,740:
[j]=u,
[j]=u,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{"clang/lib/Parse/ParseExpr.cpp",2666,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///      primary-expression: [C99 6.5.1]\n///        \'(\' expression \')\'\n/// [GNU]  \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///      postfix-expression: [C99 6.5.2]\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///      cast-expression: [C99 6.5.4]\n///        \'(\' type-name \')\' cast-expression\n/// [ARC]  bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///        (__bridge type-name) cast-expression\n///        (__bridge_transfer type-name) cast-expression\n///        (__bridge_retained type-name) cast-expression\n///      fold-expression: [C++1z]\n///        \'(\' cast-expression fold-operator \'...\' \')\'\n///        \'(\' \'...\' fold-operator cast-expression \')\'\n///        \'(\' cast-expression fold-operator \'...\'\n///                fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///      \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  // None of these cases should fall through with an invalid Result\n  // unless they\'ve already reported an error.\n  if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n    if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n      Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}}
[k]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///      primary-expression: [C99 6.5.1]\n///        \'(\' expression \')\'\n/// [GNU]  \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///      postfix-expression: [C99 6.5.2]\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///      cast-expression: [C99 6.5.4]\n///        \'(\' type-name \')\' cast-expression\n/// [ARC]  bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///        (__bridge type-name) cast-expression\n///        (__bridge_transfer type-name) cast-expression\n///        (__bridge_retained type-name) cast-expression\n///      fold-expression: [C++1z]\n///        \'(\' cast-expression fold-operator \'...\' \')\'\n///        \'(\' \'...\' fold-operator cast-expression \')\'\n///        \'(\' cast-expression fold-operator \'...\'\n///                fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///      \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  // None of these cases should fall through with an invalid Result\n  // unless they\'ve already reported an error.\n  if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n    if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n      Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}}
},
},
["err_storage_class_for_static_member"]={
["err_storage_class_for_static_member"]={
Line 3,752: Line 3,752:
[j]=o,
[j]=o,
[c]={"45f96f87c3cf",1371649314,"Fix pr16354."},
[c]={"45f96f87c3cf",1371649314,"Fix pr16354."},
[k]={{t,6728,"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]={{t,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      case SC_Extern:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}
},
},
["err_storage_spec_on_catch_parm"]={
["err_storage_spec_on_catch_parm"]={
Line 3,764: Line 3,764:
[j]=o,
[j]=o,
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"},
[k]={{Y,4329,"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]={{Y,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // We allow the \"register\" storage class on exception variables because\n  // GCC did, but we drop it completely. Any other storage class is an error.\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n  } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}}
},
},
["err_storageclass_invalid_for_member"]={
["err_storageclass_invalid_for_member"]={
Line 3,776: Line 3,776:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{y,2978,"/// 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]={{y,3495,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  default:\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}}
},
},
["err_store_value_to_reg"]={
["err_store_value_to_reg"]={
Line 3,788: Line 3,788:
[j]="Inline Assembly Issue",
[j]="Inline Assembly Issue",
[c]={qb,1620118562,vb},
[c]={qb,1620118562,vb},
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2265,"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",583,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    // If the smaller value wasn\'t mentioned in the asm string, and if the\n    // output was a register, just extend the shorter one to the size of the\n    // larger one.\n    if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n      // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n      // crash when the size larger than the register size. So we limit it here.\n      if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n        targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}}
[k]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n  for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n    // ResultTypeRequiresCast elements correspond to the first\n    // ResultTypeRequiresCast.size() elements of RegResults.\n    if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n      if (Ty.isNull()) {\n        CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    // If the smaller value wasn\'t mentioned in the asm string, and if the\n    // output was a register, just extend the shorter one to the size of the\n    // larger one.\n    if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n      // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n      // crash when the size larger than the register size. So we limit it here.\n      if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n        targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}}
},
},
["err_string_concat_mixed_suffix"]={
["err_string_concat_mixed_suffix"]={
Line 3,800: Line 3,800:
[j]=x,
[j]=x,
[c]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token"},
[c]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token"},
[k]={{"clang/lib/Lex/LiteralSupport.cpp",1853,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n    // Remove an optional ud-suffix.\n    if (ThisTokEnd[-1] != \'\"\') {\n      if (UDSuffixBuf.empty()) {\n      } else {\n        if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n          if (Diags) {\n            if (UnevaluatedStringHasUDL) {\n            } else {\n              Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}}
[k]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n    // Remove an optional ud-suffix.\n    if (ThisTokEnd[-1] != \'\"\') {\n      if (UDSuffixBuf.empty()) {\n      } else {\n        if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n          if (Diags) {\n            if (UnevaluatedStringHasUDL) {\n            } else {\n              Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}}
},
},
["err_strong_property"]={
["err_strong_property"]={
Line 3,812: Line 3,812:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{Q,1148,"/// 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]={{Q,1410,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // Fall thru - see previous comment\n      if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n        Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}}
},
},
["err_subscript_function_type"]={
["err_subscript_function_type"]={
Line 3,824: Line 3,824:
[j]=o,
[j]=o,
[c]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for"},
[c]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for"},
[k]={{p,5189,"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]={{p,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n  // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n  // type. Note that Functions are not objects, and that (in C99 parlance)\n  // incomplete types are not object types.\n  if (ResultType->isFunctionType()) {\n    Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}}
},
},
["err_subscript_incomplete_or_sizeless_type"]={
["err_subscript_incomplete_or_sizeless_type"]={
Line 3,836: Line 3,836:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,5201,"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]={{p,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}}
},
},
["err_subscript_nonfragile_interface"]={
["err_subscript_nonfragile_interface"]={
Line 3,848: Line 3,848:
[j]=o,
[j]=o,
[c]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"},
[c]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode"},
[k]={{p,5103,"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]={{p,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n    if (!LangOpts.isSubscriptPointerArithmetic()) {\n      Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}}
},
},
["err_subscript_svbool_t"]={
["err_subscript_svbool_t"]={
Line 3,860: Line 3,860:
[j]=o,
[j]=o,
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{p,5130,"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]={{p,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n    if (BTy->isSVEBool())\n      return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}
},
},
["err_super_in_lambda_unsupported"]={
["err_super_in_lambda_unsupported"]={
Line 3,872: Line 3,872:
[j]=o,
[j]=o,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[k]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",291,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  if (getCurLambda()) {\n    Diag(SuperLoc, diag::err_super_in_lambda_unsupported);"}}
[k]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",316,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  if (getCurLambda()) {\n    Diag(SuperLoc, diag::err_super_in_lambda_unsupported);"}}
},
},
["err_super_in_using_declaration"]={
["err_super_in_using_declaration"]={
Line 3,884: Line 3,884:
[j]=u,
[j]=u,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236)."},
[k]={{bb,539,"/// 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]={{bb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  if (Tok.is(tok::kw___super)) {\n    Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}}
},
},
["err_sve_vector_in_non_sve_target"]={
["err_sve_vector_in_non_sve_target"]={
Line 3,896: Line 3,896:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{hb,1818,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // Don\'t allow SVE types in functions without a SVE target.\n    if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n      if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n        Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{t,7751,"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]={{hb,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // Don\'t allow SVE types in functions without a SVE target.\n    if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n      if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n        Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{t,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // Check that SVE types are only used in functions with SVE available.\n  if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n    if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n      Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}}
},
},
["err_swift_abi_parameter_wrong_type"]={
["err_swift_abi_parameter_wrong_type"]={
Line 3,908: Line 3,908:
[j]=o,
[j]=o,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{O,4878,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{O,4885,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftAsyncContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{O,4892,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftErrorResult:\n    if (!isValidSwiftErrorResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{O,4899,"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]={{O,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{O,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftAsyncContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{O,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftErrorResult:\n    if (!isValidSwiftErrorResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{O,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  case ParameterABI::SwiftIndirectResult:\n    if (!isValidSwiftIndirectResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}}
},
},
["err_swift_async_bad_block_type"]={
["err_swift_async_bad_block_type"]={
Line 3,920: Line 3,920:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{O,6124,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!CompletionBlockType->isBlockPointerType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{O,6129,"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]={{O,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!CompletionBlockType->isBlockPointerType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{O,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Kind == SwiftAsyncAttr::None) {\n  } else {\n    if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}}
},
},
["err_swift_async_error_no_error_parameter"]={
["err_swift_async_error_no_error_parameter"]={
Line 3,932: Line 3,932:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{O,5743,"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]={{O,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonNullError: {\n    if (!AnyErrorParams) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}}
},
},
["err_swift_async_error_non_integral"]={
["err_swift_async_error_non_integral"]={
Line 3,944: Line 3,944:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{O,5714,"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]={{O,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  case SwiftAsyncErrorAttr::NonZeroArgument: {\n    if (!ErrorParam->isIntegralType(S.Context)) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}}
},
},
["err_swift_async_error_without_swift_async"]={
["err_swift_async_error_without_swift_async"]={
Line 3,956: Line 3,956:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{O,5690,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  if (AsyncAttr->getKind() == SwiftAsyncAttr::None) {\n    if (ErrorAttr->getConvention() != SwiftAsyncErrorAttr::None) {\n      S.Diag(AsyncAttr->getLocation(), diag::err_swift_async_error_without_swift_async) << AsyncAttr << isa<ObjCMethodDecl>(D);"}}
[k]={{O,6463,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  if (AsyncAttr->getKind() == SwiftAsyncAttr::None) {\n    if (ErrorAttr->getConvention() != SwiftAsyncErrorAttr::None) {\n      S.Diag(AsyncAttr->getLocation(), diag::err_swift_async_error_without_swift_async) << AsyncAttr << isa<ObjCMethodDecl>(D);"}}
},
},
["err_swift_async_no_access"]={
["err_swift_async_no_access"]={
Line 3,968: Line 3,968:
[j]=o,
[j]=o,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{O,6103,"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]={{O,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}}
},
},
["err_swift_error_result_not_after_swift_context"]={
["err_swift_error_result_not_after_swift_context"]={
Line 3,980: Line 3,980:
[j]=o,
[j]=o,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{F,2624,"/// 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]={{F,3005,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // swift_error parameters must be preceded by a swift_context parameter.\n    case ParameterABI::SwiftErrorResult:\n      if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n        S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}}
},
},
["err_swift_indirect_result_not_first"]={
["err_swift_indirect_result_not_first"]={
Line 3,992: Line 3,992:
[j]=o,
[j]=o,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{F,2608,"/// 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]={{F,2986,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // swift_indirect_result parameters must be a prefix of the function\n    // arguments.\n    case ParameterABI::SwiftIndirectResult:\n      if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n        S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}}
},
},
["err_swift_param_attr_not_swiftcall"]={
["err_swift_param_attr_not_swiftcall"]={
Line 4,004: Line 4,004:
[j]=o,
[j]=o,
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention."},
[k]={{F,2594,"/// 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]={{F,2966,"/// Check the extended parameter information.  Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n    S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}}
},
},
["err_switch_explicit_conversion"]={
["err_switch_explicit_conversion"]={
Line 4,016: Line 4,016:
[j]=o,
[j]=o,
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[k]={{K,898,"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]={{K,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}}
},
},
["err_switch_incomplete_class_type"]={
["err_switch_incomplete_class_type"]={
Line 4,028: Line 4,028:
[j]=o,
[j]=o,
[c]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion"},
[c]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion"},
[k]={{K,896,"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]={{K,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}}
},
},
["err_switch_into_protected_scope"]={
["err_switch_into_protected_scope"]={
Line 4,040: Line 4,040:
[j]=o,
[j]=o,
[c]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors."},
[c]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors."},
[k]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",108,"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",118,"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",128,"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",639,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}
[k]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n  ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n    while (I != E) {\n      if (I->getID() == diag::err_switch_into_protected_scope && isInRange(I->getLocation(), BodyRange)) {"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",134,"class ProtectedScopeFixer {\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    if (handledAllNotes)\n      Pass.TA.clearDiagnostic(diag::err_switch_into_protected_scope, ErrLoc);"},{"clang/lib/Sema/JumpDiagnostics.cpp",712,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}
},
},
["err_switch_multiple_conversions"]={
["err_switch_multiple_conversions"]={
Line 4,052: Line 4,052:
[j]=o,
[j]=o,
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an"},
[k]={{K,902,"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]={{K,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}}
},
},
["err_sycl_special_type_num_init_method"]={
["err_sycl_special_type_num_init_method"]={
Line 4,064: Line 4,064:
[j]=a,
[j]=a,
[c]={tb,1616787805,sb},
[c]={tb,1616787805,sb},
[k]={{t,15589,"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]={{t,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n  if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n    if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n      if (NumInitMethods > 1 || !Def->hasInitMethod())\n        Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}}
},
},
["err_synthesize_category_decl"]={
["err_synthesize_category_decl"]={
Line 4,076: Line 4,076:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{Q,967,"/// 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]={{Q,1176,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    if (Synthesize) {\n      Diag(AtLoc, diag::err_synthesize_category_decl);"}}
},
},
["err_synthesize_on_class_property"]={
["err_synthesize_on_class_property"]={
Line 4,088: Line 4,088:
[j]=o,
[j]=o,
[c]={U,1480718311,V},
[c]={U,1480718311,V},
[k]={{Q,918,"/// 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]={{Q,1118,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (property->isClassProperty() && Synthesize) {\n      Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}}
},
},
["err_synthesize_variable_sized_ivar"]={
["err_synthesize_variable_sized_ivar"]={
Line 4,100: Line 4,100:
[j]=o,
[j]=o,
[c]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[c]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[k]={{Q,1094,"/// 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]={{Q,1335,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (!Ivar) {\n      if (!CompleteTypeErr) {\n        if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n          Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}}
},
},
["err_synthesized_property_name"]={
["err_synthesized_property_name"]={
Line 4,112: Line 4,112:
[j]=u,
[j]=u,
[c]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions"},
[c]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions"},
[k]={{"clang/lib/Parse/ParseObjc.cpp",2122,"///  property-synthesis:\n///    @synthesize property-ivar-list \';\'\n///\n///  property-ivar-list:\n///    property-ivar\n///    property-ivar-list \',\' property-ivar\n///\n///  property-ivar:\n///    identifier\n///    identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n  while (true) {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_synthesized_property_name);"}}
[k]={{"clang/lib/Parse/ParseObjc.cpp",2385,"///  property-synthesis:\n///    @synthesize property-ivar-list \';\'\n///\n///  property-ivar-list:\n///    property-ivar\n///    property-ivar-list \',\' property-ivar\n///\n///  property-ivar:\n///    identifier\n///    identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n  while (true) {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_synthesized_property_name);"}}
},
},
["err_synthesizing_arc_weak_property_disabled"]={
["err_synthesizing_arc_weak_property_disabled"]={
Line 4,124: Line 4,124:
[j]="ARC Weak References",
[j]="ARC Weak References",
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[k]={{Q,1034,"/// 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]={{Q,1253,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}
},
},
["err_synthesizing_arc_weak_property_no_runtime"]={
["err_synthesizing_arc_weak_property_no_runtime"]={
Line 4,136: Line 4,136:
[j]="ARC Weak References",
[j]="ARC Weak References",
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:"},
[k]={{Q,1034,"/// 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]={{Q,1254,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n            Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}
},
},
["err_systemz_invalid_tabort_code"]={
["err_systemz_invalid_tabort_code"]={
Line 4,148: Line 4,148:
[j]=o,
[j]=o,
[c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"},
[c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12"},
[k]={{v,4981,"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]={{v,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == SystemZ::BI__builtin_tabort) {\n    if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n      if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n        return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}}
},
},
["err_tag_definition_of_typedef"]={
["err_tag_definition_of_typedef"]={
Line 4,160: Line 4,160:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,15259,"/// 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]={{t,17451,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n        Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}}
},
},
["err_tag_index_out_of_range"]={
["err_tag_index_out_of_range"]={
Line 4,172: Line 4,172:
[j]=o,
[j]=o,
[c]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a..."},
[c]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a..."},
[k]={{v,16439,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (TypeTagIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{v,16454,"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]={{v,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (TypeTagIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{v,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  if (ArgumentIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}}
},
},
["err_tag_reference_conflict"]={
["err_tag_reference_conflict"]={
Line 4,184: Line 4,184:
[j]=o,
[j]=o,
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[k]={{t,15249,"/// 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]={{t,17442,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n        Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}}
},
},
["err_tag_reference_non_tag"]={
["err_tag_reference_non_tag"]={
Line 4,196: Line 4,196:
[j]=o,
[j]=o,
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same"},
[k]={{t,15238,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n        Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{q,3583,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{q,8201,"// 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]={{t,17429,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n        Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{q,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{q,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}}
},
},
["err_tagless_friend_type_template"]={
["err_tagless_friend_type_template"]={
Line 4,208: Line 4,208:
[j]=o,
[j]=o,
[c]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates.  Angst about same."},
[c]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates.  Angst about same."},
[k]={{y,14864,"/// 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]={{y,17444,"/// Handle a friend type declaration.  This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class.  So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n///  friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n///  template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n  // This is definitely an error in C++98.  It\'s probably meant to\n  // be forbidden in C++0x, too, but the specification is just\n  // poorly written.\n  //\n  // The problem is with declarations like the following:\n  //  template <T> friend A<T>::foo;\n  // where deciding whether a class C is a friend or not now hinges\n  // on whether there exists an instantiation of A that causes\n  // \'foo\' to equal C.  There are restrictions on class-heads\n  // (which we declare (by fiat) elaborated friend declarations to\n  // be) that makes this tractable.\n  //\n  // FIXME: handle \"template <> friend class A<T>;\", which\n  // is possibly well-formed?  Who even knows?\n  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n    Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}}
},
},
["err_target_clone_doesnt_match"]={
["err_target_clone_doesnt_match"]={
Line 4,220: Line 4,220:
[j]=a,
[j]=a,
[c]={tb,1616787805,sb},
[c]={tb,1616787805,sb},
[k]={{t,10004,"/// 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]={{t,11477,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    case MultiVersionKind::TargetClones: {\n      if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n        S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}}
},
},
["err_target_clone_must_have_default"]={
["err_target_clone_must_have_default"]={
Line 4,232: Line 4,232:
[j]=a,
[j]=a,
[c]={tb,1616787805,sb},
[c]={tb,1616787805,sb},
[k]={{O,3197,"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]={{O,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!HasDefault) {\n    S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}}
},
},
["err_target_unknown_abi"]={
["err_target_unknown_abi"]={
Line 4,244: Line 4,244:
[j]=a,
[j]=a,
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[k]={{ob,742,"/// 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]={{ob,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target ABI if specified.\n  if (!Opts->ABI.empty() && !Target->setABI(Opts->ABI)) {\n    Diags.Report(diag::err_target_unknown_abi) << Opts->ABI;"}}
},
},
["err_target_unknown_cpu"]={
["err_target_unknown_cpu"]={
Line 4,256: Line 4,256:
[j]=a,
[j]=a,
[c]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."},
[c]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX)."},
[k]={{ob,722,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{ob,732,"/// 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]={{ob,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{ob,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}}
},
},
["err_target_unknown_fpmath"]={
["err_target_unknown_fpmath"]={
Line 4,268: Line 4,268:
[j]=a,
[j]=a,
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[k]={{ob,748,"/// 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]={{ob,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Set the fp math unit.\n  if (!Opts->FPMath.empty() && !Target->setFPMath(Opts->FPMath)) {\n    Diags.Report(diag::err_target_unknown_fpmath) << Opts->FPMath;"}}
},
},
["err_target_unknown_triple"]={
["err_target_unknown_triple"]={
Line 4,280: Line 4,280:
[j]=a,
[j]=a,
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets."},
[k]={{ob,715,"/// 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",88,"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",417,"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",124,"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",352,"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",513,"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",39,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}}
[k]={{ob,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  if (!Target) {\n    Diags.Report(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/CrossWindows.cpp",98,"void tools::CrossWindows::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/lib/Driver/ToolChains/Gnu.cpp",453,"void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n  } else {\n    D.Diag(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/MinGW.cpp",139,"void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/tools/driver/cc1as_main.cpp",390,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  if (!TheTarget)\n    return Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/tools/driver/cc1as_main.cpp",574,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  if (!TAP)\n    Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/unittests/Basic/DiagnosticTest.cpp",42,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}}
},
},
["err_target_unsupported_abi"]={
["err_target_unsupported_abi"]={
Line 4,292: Line 4,292:
[j]=a,
[j]=a,
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."},
[c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases."},
[k]={{"clang/lib/Basic/Targets/Mips.cpp",194,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // 64-bit ABI\'s require 64-bit CPU\'s.\n  if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}}
[k]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // 64-bit ABI\'s require 64-bit CPU\'s.\n  if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}}
},
},
["err_target_unsupported_abi_for_triple"]={
["err_target_unsupported_abi_for_triple"]={
Line 4,315: Line 4,315:
[j]=a,
[j]=a,
[c]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM"},
[c]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM"},
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4179,"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",178,"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",85,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Arch == llvm::Triple::x86)\n  else if (Arch == llvm::Triple::arm)\n  else if (Arch == llvm::Triple::x86_64)\n  else if (Arch == llvm::Triple::mipsel)\n  else\n    D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}}
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n    if (Failure || Version < 7)\n      D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  default:\n    D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Arch == llvm::Triple::x86)\n  else if (Arch == llvm::Triple::arm)\n  else if (Arch == llvm::Triple::x86_64)\n  else if (Arch == llvm::Triple::mipsel)\n  else\n    D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}}
},
},
["err_target_unsupported_cpu_for_micromips"]={
["err_target_unsupported_cpu_for_micromips"]={
Line 4,327: Line 4,327:
[j]=a,
[j]=a,
[c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"},
[c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6"},
[k]={{"clang/lib/Basic/Targets/Mips.cpp",188,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // microMIPS64R6 backend was removed.\n  if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}}
[k]={{"clang/lib/Basic/Targets/Mips.cpp",239,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // microMIPS64R6 backend was removed.\n  if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}}
},
},
["err_target_unsupported_execute_only"]={
["err_target_unsupported_execute_only"]={
Line 4,339: Line 4,339:
[j]=a,
[j]=a,
[c]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen"},
[c]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen"},
[k]={{nb,722,"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]={{nb,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n          D.Diag(diag::err_target_unsupported_execute_only) << Triple.getArchName();"}}
},
},
["err_target_unsupported_fpmath"]={
["err_target_unsupported_fpmath"]={
Line 4,351: Line 4,351:
[j]=a,
[j]=a,
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86."},
[k]={{"clang/lib/Basic/Targets/ARM.cpp",568,"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",350,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n  // matches the selected sse level.\n  if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}}
[k]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n  // matches the selected sse level.\n  if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}}
},
},
["err_target_unsupported_mcmse"]={
["err_target_unsupported_mcmse"]={
Line 4,363: Line 4,363:
[j]=a,
[j]=a,
[c]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro"},
[c]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro"},
[k]={{"clang/lib/Basic/Targets/ARM.cpp",510,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // This does not diagnose illegal cases like having both\n  // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n  for (const auto &Feature : Features) {\n    if (Feature == \"+soft-float\") {\n    } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n    } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n    } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n    } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n    } else if (Feature == \"+neon\") {\n    } else if (Feature == \"+hwdiv\") {\n    } else if (Feature == \"+hwdiv-arm\") {\n    } else if (Feature == \"+crc\") {\n    } else if (Feature == \"+crypto\") {\n    } else if (Feature == \"+sha2\") {\n    } else if (Feature == \"+aes\") {\n    } else if (Feature == \"+dsp\") {\n    } else if (Feature == \"+fp64\") {\n    } else if (Feature == \"+8msecext\") {\n      if (CPUProfile != \"M\" || ArchVersion != 8) {\n        Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}}
[k]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // This does not diagnose illegal cases like having both\n  // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n  for (const auto &Feature : Features) {\n    if (Feature == \"+soft-float\") {\n    } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n    } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n    } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n    } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n    } else if (Feature == \"+neon\") {\n    } else if (Feature == \"+hwdiv\") {\n    } else if (Feature == \"+hwdiv-arm\") {\n    } else if (Feature == \"+crc\") {\n    } else if (Feature == \"+crypto\") {\n    } else if (Feature == \"+sha2\") {\n    } else if (Feature == \"+aes\") {\n    } else if (Feature == \"+dsp\") {\n    } else if (Feature == \"+fp64\") {\n    } else if (Feature == \"+8msecext\") {\n      if (CPUProfile != \"M\" || ArchVersion != 8) {\n        Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}}
},
},
["err_target_unsupported_tp_hard"]={
["err_target_unsupported_tp_hard"]={
Line 4,375: Line 4,375:
[j]=a,
[j]=a,
[c]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[c]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[k]={{nb,163,"// 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",3041,"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]={{nb,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    if ((ThreadPointer == ReadTPMode::TPIDRURW || ThreadPointer == ReadTPMode::TPIDRURO || ThreadPointer == ReadTPMode::TPIDRPRW) && !isHardTPSupported(Triple) && !ForAS) {\n      D.Diag(diag::err_target_unsupported_tp_hard) << Triple.getArchName();"},{"clang/lib/Driver/ToolChains/Clang.cpp",3397,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n      // Check whether the target subarch supports the hardware TLS register\n      if (!arm::isHardTPSupported(EffectiveTriple)) {\n        D.Diag(diag::err_target_unsupported_tp_hard) << EffectiveTriple.getArchName();"}}
},
},
["err_target_unsupported_type"]={
["err_target_unsupported_type"]={
Line 4,387: Line 4,387:
[j]="OpenMP Issue",
[j]="OpenMP Issue",
[c]={pb,1615397021,ub},
[c]={pb,1615397021,ub},
[k]={{hb,1733,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if (Ty->isBitIntType()) {\n      if (!Context.getTargetInfo().hasBitIntType()) {\n        PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{hb,1754,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{hb,1777,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{hb,1795,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{v,4080,"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]={{hb,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if (Ty->isBitIntType()) {\n      if (!Context.getTargetInfo().hasBitIntType()) {\n        PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{hb,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{hb,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{hb,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n      PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{v,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n      return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}}
},
},
["err_target_unsupported_unaligned"]={
["err_target_unsupported_unaligned"]={
Line 4,399: Line 4,399:
[j]=a,
[j]=a,
[c]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets"},
[c]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets"},
[k]={{nb,737,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{nb,741,"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]={{nb,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{nb,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n      // v8M Baseline follows on from v6M, so doesn\'t support unaligned memory\n      // access either.\n      else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v8m.base\";"}}
},
},
["err_tcb_conflicting_attributes"]={
["err_tcb_conflicting_attributes"]={
Line 4,411: Line 4,411:
[j]=a,
[j]=a,
[c]={W,1590001902,X},
[c]={W,1590001902,X},
[k]={{O,7603,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // A function cannot be have both regular and leaf membership in the same TCB.\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n    S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{O,7619,"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]={{O,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // A function cannot be have both regular and leaf membership in the same TCB.\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n    S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{O,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n    S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}}
},
},
["err_temp_copy_ambiguous"]={
["err_temp_copy_ambiguous"]={
Line 4,423: Line 4,423:
[j]=o,
[j]=o,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[k]={{D,5792,"/// 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]={{D,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AmbiguousCandidates, CurInitExpr);"}}
},
},
["err_temp_copy_deleted"]={
["err_temp_copy_deleted"]={
Line 4,435: Line 4,435:
[j]=o,
[j]=o,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[k]={{D,5796,"/// 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]={{D,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_Deleted:\n    S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}}
},
},
["err_temp_copy_incomplete"]={
["err_temp_copy_incomplete"]={
Line 4,447: Line 4,447:
[j]=o,
[j]=o,
[c]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure"},
[c]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure"},
[k]={{D,5768,"/// 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]={{D,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}}
},
},
["err_temp_copy_no_viable"]={
["err_temp_copy_no_viable"]={
Line 4,459: Line 4,459:
[j]=o,
[j]=o,
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the"},
[k]={{D,5786,"/// 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]={{D,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}}
},
},
["err_template_arg_address_of_non_pointer"]={
["err_template_arg_address_of_non_pointer"]={
Line 4,471: Line 4,471:
[j]=o,
[j]=o,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[k]={{q,5658,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{q,5663,"/// 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]={{q,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n    // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{q,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (AddressTaken && ParamType->isReferenceType()) {\n    S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}}
},
},
["err_template_arg_deduced_incomplete_pack"]={
["err_template_arg_deduced_incomplete_pack"]={
Line 4,483: Line 4,483:
[j]=o,
[j]=o,
[c]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context."},
[c]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context."},
[k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2307,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n  if (Arg.getKind() == TemplateArgument::Pack) {\n    for (const auto &P : Arg.pack_elements()) {\n      if (P.isNull()) {\n        S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}}
[k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n  if (Arg.getKind() == TemplateArgument::Pack) {\n    for (const auto &P : Arg.pack_elements()) {\n      if (P.isNull()) {\n        S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}}
},
},
["err_template_arg_field"]={
["err_template_arg_field"]={
Line 4,495: Line 4,495:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5601,"/// 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]={{q,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}}
},
},
["err_template_arg_invalid"]={
["err_template_arg_invalid"]={
Line 4,507: Line 4,507:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{q,5407,"/// 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]={{q,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}}
},
},
["err_template_arg_list_constraints_not_satisfied"]={
["err_template_arg_list_constraints_not_satisfied"]={
Line 4,519: Line 4,519:
[j]=o,
[j]=o,
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute"},
[k]={{"clang/lib/Sema/SemaConcept.cpp",703,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n  if (!Satisfaction.IsSatisfied) {\n    Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}}
[k]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n  if (!Satisfaction.IsSatisfied) {\n    Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}}
},
},
["err_template_arg_list_different_arity"]={
["err_template_arg_list_different_arity"]={
Line 4,531: Line 4,531:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,4872,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{q,4924,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{q,5104,"/// 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]={{q,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{q,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{q,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}}
},
},
["err_template_arg_member_ptr_base_derived_not_supported"]={
["err_template_arg_member_ptr_base_derived_not_supported"]={
Line 4,543: Line 4,543:
[j]=o,
[j]=o,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[k]={{q,5998,"/// 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]={{q,7325,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17) {\n    case APValue::MemberPointer: {\n      // FIXME: We need TemplateArgument representation and mangling for these.\n      if (!Value.getMemberPointerPath().empty()) {\n        Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}}
},
},
["err_template_arg_method"]={
["err_template_arg_method"]={
Line 4,555: Line 4,555:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5609,"/// 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]={{q,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_method) << Method << Arg->getSourceRange();"}}
},
},
["err_template_arg_must_be_expr"]={
["err_template_arg_must_be_expr"]={
Line 4,567: Line 4,567:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,4750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{q,4771,"/// 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]={{q,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::TemplateExpansion:\n      Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{q,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      if (T->isFunctionType())\n      else\n        Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}}
},
},
["err_template_arg_must_be_template"]={
["err_template_arg_must_be_template"]={
Line 4,579: Line 4,579:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,4835,"/// 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]={{q,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  case TemplateArgument::Type:\n    Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}}
},
},
["err_template_arg_must_be_type"]={
["err_template_arg_must_be_type"]={
Line 4,591: Line 4,591:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,4379,"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]={{q,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  default: {\n    Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}}
},
},
["err_template_arg_must_be_type_suggest"]={
["err_template_arg_must_be_type_suggest"]={
Line 4,603: Line 4,603:
[j]=o,
[j]=o,
[c]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler"},
[c]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler"},
[k]={{q,4352,"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]={{q,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  case TemplateArgument::Expression: {\n    if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n        Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}}
},
},
["err_template_arg_no_ref_bind"]={
["err_template_arg_no_ref_bind"]={
Line 4,615: Line 4,615:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5463,"/// 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]={{q,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}}
},
},
["err_template_arg_nontype_ambig"]={
["err_template_arg_nontype_ambig"]={
Line 4,627: Line 4,627:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,4769,"/// 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]={{q,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    case TemplateArgument::Type: {\n      if (T->isFunctionType())\n        Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}}
},
},
["err_template_arg_not_address_constant"]={
["err_template_arg_not_address_constant"]={
Line 4,639: Line 4,639:
[j]=o,
[j]=o,
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[k]={{q,5374,"/// 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]={{q,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}}
},
},
["err_template_arg_not_address_of"]={
["err_template_arg_not_address_of"]={
Line 4,651: Line 4,651:
[j]=o,
[j]=o,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[k]={{q,5684,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{q,5689,"/// 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]={{q,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{q,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    } else if (Entity->getType()->isArrayType()) {\n    } else {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}}
},
},
["err_template_arg_not_convertible"]={
["err_template_arg_not_convertible"]={
Line 4,663: Line 4,663:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5465,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n      else\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{q,5784,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{q,6159,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{q,6315,"/// 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]={{q,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n    if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n      // We can\'t perform this conversion or binding.\n      if (ParamType->isReferenceType())\n      else\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{q,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{q,7521,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n    } else if (ParamType->isBooleanType()) {\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    } else {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{q,7704,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    case NPV_NotNullPointer:\n      Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}}
},
},
["err_template_arg_not_decl_ref"]={
["err_template_arg_not_decl_ref"]={
Line 4,675: Line 4,675:
[j]=o,
[j]=o,
[c]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template"},
[c]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template"},
[k]={{q,5514,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.getLangOpts().MicrosoftExt) {\n    if (FirstOpLoc.isValid()) {\n      if (FirstOpKind == UO_AddrOf)\n      else if (Arg->getType()->isPointerType()) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{q,5594,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{q,6018,"/// 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]={{q,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (S.getLangOpts().MicrosoftExt) {\n    if (FirstOpLoc.isValid()) {\n      if (FirstOpKind == UO_AddrOf)\n      else if (Arg->getType()->isPointerType()) {\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{q,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!Entity) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{q,7354,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  if (getLangOpts().CPlusPlus17) {\n    case APValue::LValue: {\n      if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n        Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}}
},
},
["err_template_arg_not_ice"]={
["err_template_arg_not_ice"]={
Line 4,687: Line 4,687:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6136,"/// 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]={{q,7496,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n    } else if (!Arg->isValueDependent()) {\n      class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n        SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}}
},
},
["err_template_arg_not_integral_or_enumeral"]={
["err_template_arg_not_integral_or_enumeral"]={
Line 4,699: Line 4,699:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6126,"/// 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]={{q,7483,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n  //  corresponding template-parameter then the program is\n  //  ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}}
},
},
["err_template_arg_not_object_or_func"]={
["err_template_arg_not_object_or_func"]={
Line 4,711: Line 4,711:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5622,"/// 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]={{q,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_object_or_func) << Arg->getSourceRange();"}}
},
},
["err_template_arg_not_pointer_to_member_form"]={
["err_template_arg_not_pointer_to_member_form"]={
Line 4,723: Line 4,723:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5790,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!DRE)\n    return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{q,5809,"/// 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]={{q,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (!DRE)\n    return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{q,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}}
},
},
["err_template_arg_not_valid_template"]={
["err_template_arg_not_valid_template"]={
Line 4,735: Line 4,735:
[j]=o,
[j]=o,
[c]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases."},
[c]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases."},
[k]={{q,1417,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (!Default.isInvalid()) {\n    if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n      Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{q,6374,"/// 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]={{q,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (!Default.isInvalid()) {\n    if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n      Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{q,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++0x [temp.arg.template]p1:\n  //  A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //  id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}}
},
},
["err_template_arg_object_no_linkage"]={
["err_template_arg_object_no_linkage"]={
Line 4,747: Line 4,747:
[j]=o,
[j]=o,
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{q,5632,"/// 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]={{q,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}}
},
},
["err_template_arg_overload_type"]={
["err_template_arg_overload_type"]={
Line 4,759: Line 4,759:
[j]=o,
[j]=o,
[c]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the"},
[c]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the"},
[k]={{q,5317,"/// 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]={{q,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n  if (CanonArg->isVariablyModifiedType()) {\n  } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {\n    return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;"}}
},
},
["err_template_arg_ref_bind_ignores_quals"]={
["err_template_arg_ref_bind_ignores_quals"]={
Line 4,771: Line 4,771:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,5450,"/// 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]={{q,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n          S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}}
},
},
["err_template_arg_reference_var"]={
["err_template_arg_reference_var"]={
Line 4,783: Line 4,783:
[j]=o,
[j]=o,
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to"},
[k]={{q,5640,"/// 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]={{q,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}}
},
},
["err_template_arg_template_params_mismatch"]={
["err_template_arg_template_params_mismatch"]={
Line 4,795: Line 4,795:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6572,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{q,6590,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{q,6621,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{q,6685,"/// 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]={{q,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{q,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      if (TemplateArgLoc.isValid()) {\n        S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{q,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          if (TemplateArgLoc.isValid()) {\n            S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{q,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (TemplateArgLoc.isValid()) {\n    S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}}
},
},
["err_template_arg_thread_local"]={
["err_template_arg_thread_local"]={
Line 4,807: Line 4,807:
[j]=o,
[j]=o,
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{q,5647,"/// 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]={{q,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  if (Var) {\n    // A template argument must have static storage duration.\n    if (Var->getTLSKind()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}}
},
},
["err_template_arg_untyped_null_constant"]={
["err_template_arg_untyped_null_constant"]={
Line 4,819: Line 4,819:
[j]=o,
[j]=o,
[c]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type"},
[c]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type"},
[k]={{q,5416,"/// 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]={{q,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // If we don\'t have a null pointer value, but we do have a NULL pointer\n  // constant, suggest a cast to the appropriate type.\n  if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}}
},
},
["err_template_arg_wrongtype_null_constant"]={
["err_template_arg_wrongtype_null_constant"]={
Line 4,831: Line 4,831:
[j]=o,
[j]=o,
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on"},
[k]={{q,5398,"/// 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]={{q,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  //  - a constant expression that evaluates to a null pointer value (4.10); or\n  //  - a constant expression that evaluates to a null member pointer value\n  //    (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}}
},
},
["err_template_defn_explicit_instantiation"]={
["err_template_defn_explicit_instantiation"]={
Line 4,843: Line 4,843:
[j]=u,
[j]=u,
[c]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"},
[c]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)"},
[k]={{R,2249,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  case ParsedTemplateInfo::ExplicitInstantiation: {\n    if (Tok.is(tok::semi)) {\n    } else {\n      // Check that this is a valid instantiation\n      if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{bb,1767,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  } else {\n    if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{rb,292,"/// 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]={{R,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  case ParsedTemplateInfo::ExplicitInstantiation: {\n    if (Tok.is(tok::semi)) {\n    } else {\n      // Check that this is a valid instantiation\n      if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{bb,2085,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (TemplateId) {\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  } else {\n    if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{rb,334,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n    if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}}
},
},
["err_template_different_requires_clause"]={
["err_template_different_requires_clause"]={
Line 4,855: Line 4,855:
[j]=o,
[j]=o,
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias))."},
[k]={{q,6773,"/// 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]={{q,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    auto Diagnose = [&] {\n      Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}}
},
},
["err_template_different_type_constraint"]={
["err_template_different_type_constraint"]={
Line 4,867: Line 4,867:
[j]=o,
[j]=o,
[c]={kb,1576172311,lb},
[c]={kb,1576172311,lb},
[k]={{q,6658,"/// 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]={{q,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    auto Diagnose = [&] {\n      S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}}
},
},
["err_template_expansion_into_fixed_list"]={
["err_template_expansion_into_fixed_list"]={
Line 4,879: Line 4,879:
[j]=o,
[j]=o,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{q,4944,"/// 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]={{q,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    if (ArgIdx < NumArgs) {\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}}
},
},
["err_template_id_not_a_type"]={
["err_template_id_not_a_type"]={
Line 4,891: Line 4,891:
[j]=o,
[j]=o,
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType"},
[k]={{q,3273,"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]={{q,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n    Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}}
},
},
["err_template_inside_local_class"]={
["err_template_inside_local_class"]={
Line 4,903: Line 4,903:
[j]=o,
[j]=o,
[c]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes"},
[c]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes"},
[k]={{q,6835,"/// 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]={{q,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  // C++ [temp]p2:\n  //  A template-declaration can appear only as a namespace scope or\n  //  class scope declaration.\n  // C++ [temp.expl.spec]p3:\n  //  An explicit specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n  // C++ [temp.class.spec]p6: [P2096]\n  //  A partial specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n  if (Ctx) {\n    if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n      // C++ [temp.mem]p2:\n      //  A local class shall not have member templates.\n      if (RD->isLocalClass())\n        return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}}
},
},
["err_template_instantiate_undefined"]={
["err_template_instantiate_undefined"]={
Line 4,915: Line 4,915:
[j]=o,
[j]=o,
[c]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We"},
[c]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We"},
[k]={{q,721,"/// 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]={{q,854,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n      Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}}
},
},
["err_template_instantiate_within_definition"]={
["err_template_instantiate_within_definition"]={
Line 4,927: Line 4,927:
[j]=o,
[j]=o,
[c]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is"},
[c]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is"},
[k]={{q,703,"/// 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]={{q,827,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n    Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}}
},
},
["err_template_kernel"]={
["err_template_kernel"]={
Line 4,939: Line 4,939:
[j]=o,
[j]=o,
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."},
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions."},
[k]={{t,9348,"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]={{t,10714,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    if (getLangOpts().OpenCLCPlusPlus) {\n      if (FunctionTemplate) {\n        Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}}
},
},
["err_template_kw_missing"]={
["err_template_kw_missing"]={
Line 4,951: Line 4,951:
[j]=o,
[j]=o,
[c]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"},
[c]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"},
[k]={{p,13907,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Handle pseudo-objects in the LHS.\n  if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n    // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n    // template, diagnose the missing \'template\' keyword instead of diagnosing\n    // an invalid use of a bound member function.\n    //\n    // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n    // to C++1z [over.over]/1.4, but we already checked for that case above.\n    if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n      if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n        Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{q,327,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n  Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{q,579,"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]={{p,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n  // Handle pseudo-objects in the LHS.\n  if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n    // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n    // template, diagnose the missing \'template\' keyword instead of diagnosing\n    // an invalid use of a bound member function.\n    //\n    // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n    // to C++1z [over.over]/1.4, but we already checked for that case above.\n    if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n      if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n        Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{q,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n  Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{q,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n  // was missing.\n  if (MissingTemplateKeyword) {\n    Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}}
},
},
["err_template_kw_refers_to_dependent_non_template"]={
["err_template_kw_refers_to_dependent_non_template"]={
Line 4,963: Line 4,963:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{q,4301,"/// 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]={{q,5193,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}}
},
},
["err_template_kw_refers_to_non_template"]={
["err_template_kw_refers_to_non_template"]={
Line 4,975: Line 4,975:
[j]=o,
[j]=o,
[c]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur"},
[c]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur"},
[k]={{q,491,"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]={{q,557,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (Found.empty()) {\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n    if (ExampleLookupResult && RequiredTemplate) {\n      Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}}
},
},
["err_template_kw_refers_to_type_template"]={
["err_template_kw_refers_to_type_template"]={
Line 4,987: Line 4,987:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{q,4180,"// 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]={{q,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n    Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}}
},
},
["err_template_linkage"]={
["err_template_linkage"]={
Line 4,999: Line 4,999:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6812,"/// 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]={{q,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  if (Ctx && Ctx->isExternCContext()) {\n    Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}}
},
},
["err_template_member"]={
["err_template_member"]={
Line 5,011: Line 5,011:
[j]=o,
[j]=o,
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[k]={{y,3033,"/// 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]={{y,3558,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      if (TemplateParams->size()) {\n        Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}
},
},
["err_template_member_noparams"]={
["err_template_member_noparams"]={
Line 5,023: Line 5,023:
[j]=o,
[j]=o,
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan"},
[k]={{y,3036,"/// 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]={{y,3565,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      if (TemplateParams->size()) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}
},
},
["err_template_missing_args"]={
["err_template_missing_args"]={
Line 5,035: Line 5,035:
[j]=o,
[j]=o,
[c]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type"},
[c]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type"},
[k]={{q,4085,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}}
[k]={{q,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}}
},
},
["err_template_nontype_parm_bad_structural_type"]={
["err_template_nontype_parm_bad_structural_type"]={
Line 5,047: Line 5,047:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{q,1247,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  if (!getLangOpts().CPlusPlus20) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}}
[k]={{q,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  if (!getLangOpts().CPlusPlus20) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}}
},
},
["err_template_nontype_parm_bad_type"]={
["err_template_nontype_parm_bad_type"]={
Line 5,059: Line 5,059:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,1117,"/// 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]={{q,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n  // there\'s not much more we can say about non-scalar non-class types --\n  // because we can\'t see functions or arrays here, those can only be language\n  // extensions.\n  if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}}
},
},
["err_template_nontype_parm_different_type"]={
["err_template_nontype_parm_different_type"]={
Line 5,071: Line 5,071:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6619,"/// 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]={{q,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // If we are matching a template template argument to a template\n    // template parameter and one of the non-type template parameter types\n    // is dependent, then we must wait until template instantiation time\n    // to actually compare the arguments.\n    if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      if (!S.Context.hasSameType(OldType, NewType)) {\n        if (Complain) {\n          unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}}
},
},
["err_template_nontype_parm_incomplete"]={
["err_template_nontype_parm_incomplete"]={
Line 5,083: Line 5,083:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{q,1100,"/// 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]={{q,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}}
},
},
["err_template_nontype_parm_not_literal"]={
["err_template_nontype_parm_not_literal"]={
Line 5,095: Line 5,095:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{q,1122,"/// 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]={{q,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  if (RequireLiteralType(Loc, T, diag::err_template_nontype_parm_not_literal))"}}
},
},
["err_template_nontype_parm_not_structural"]={
["err_template_nontype_parm_not_structural"]={
Line 5,107: Line 5,107:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{q,1125,"/// 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]={{q,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}}
},
},
["err_template_nontype_parm_rvalue_ref"]={
["err_template_nontype_parm_rvalue_ref"]={
Line 5,119: Line 5,119:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{q,1108,"/// 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]={{q,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Structural types are required to be object types or lvalue references.\n  if (T->isRValueReferenceType()) {\n    Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}}
},
},
["err_template_outside_namespace_or_class_scope"]={
["err_template_outside_namespace_or_class_scope"]={
Line 5,131: Line 5,131:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6841,"/// 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]={{q,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}}
},
},
["err_template_param_default_arg_inconsistent_redefinition"]={
["err_template_param_default_arg_inconsistent_redefinition"]={
Line 5,143: Line 5,143:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{q,2543,"/// 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]={{q,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}}
},
},
["err_template_param_default_arg_missing"]={
["err_template_param_default_arg_missing"]={
Line 5,155: Line 5,155:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,2552,"/// 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]={{q,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    } else if (InconsistentDefaultArg) {\n    } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}}
},
},
["err_template_param_default_arg_redefinition"]={
["err_template_param_default_arg_redefinition"]={
Line 5,167: Line 5,167:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,2537,"/// 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]={{q,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}}
},
},
["err_template_param_different_kind"]={
["err_template_param_different_kind"]={
Line 5,179: Line 5,179:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6570,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_param_different_kind;"}}
[k]={{q,8016,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_param_different_kind;"}}
},
},
["err_template_param_list_different_arity"]={
["err_template_param_list_different_arity"]={
Line 5,191: Line 5,191:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6683,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  unsigned NextDiag = diag::err_template_param_list_different_arity;"}}
[k]={{q,8165,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  unsigned NextDiag = diag::err_template_param_list_different_arity;"}}
},
},
["err_template_param_list_matches_nontemplate"]={
["err_template_param_list_matches_nontemplate"]={
Line 5,203: Line 5,203:
[j]=o,
[j]=o,
[c]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template"},
[c]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template"},
[k]={{q,2935,"/// 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]={{q,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    if (NeedEmptyTemplateHeader) {\n      if (ParamIdx < ParamLists.size()) {\n        if (ParamLists[ParamIdx]->size() > 0) {\n          // The header has template parameters when it shouldn\'t. Complain.\n          if (!SuppressDiagnostic)\n            Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}}
},
},
["err_template_param_pack_default_arg"]={
["err_template_param_pack_default_arg"]={
Line 5,215: Line 5,215:
[j]=o,
[j]=o,
[c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."},
[c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments."},
[k]={{q,902,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (DefaultArg && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{q,1353,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (Default && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{q,1402,"/// 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]={{q,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (DefaultArg && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{q,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (Default && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{q,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (IsParameterPack && !Default.isInvalid()) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}}
},
},
["err_template_param_pack_must_be_last_template_parameter"]={
["err_template_param_pack_must_be_last_template_parameter"]={
Line 5,227: Line 5,227:
[j]=o,
[j]=o,
[c]={"327865db5323",1244848815,"A parameter pack must always come last in a class template."},
[c]={"327865db5323",1244848815,"A parameter pack must always come last in a class template."},
[k]={{q,2519,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // C++11 [temp.param]p11:\n    //  If a template parameter of a primary class template or alias template\n    //  is a template parameter pack, it shall be the last template parameter.\n    if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{q,7391,"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]={{q,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // C++11 [temp.param]p11:\n    //  If a template parameter of a primary class template or alias template\n    //  is a template parameter pack, it shall be the last template parameter.\n    if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{q,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // Ensure that the parameter pack, if present, is the last parameter in the\n  // template.\n  for (TemplateParameterList::const_iterator ParamIt = Params->begin(), ParamEnd = Params->end(); ParamIt != ParamEnd; ++ParamIt) {\n    if (Param->isParameterPack()) {\n      Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}}
},
},
["err_template_param_shadow"]={
["err_template_param_shadow"]={
Line 5,239: Line 5,239:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{yb,1197,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{q,757,"/// 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]={{yb,1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  if (TemplateParams) {\n    for (const auto *TP : TemplateParams->asArray()) {\n      for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{q,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}}
},
},
["err_template_parameter_default_friend_template"]={
["err_template_parameter_default_friend_template"]={
Line 5,251: Line 5,251:
[j]=o,
[j]=o,
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[k]={{q,2290,"/// 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]={{q,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_FriendFunctionTemplate:\n    S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}}
},
},
["err_template_parameter_default_template_member"]={
["err_template_parameter_default_template_member"]={
Line 5,263: Line 5,263:
[j]=o,
[j]=o,
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in"},
[k]={{q,2282,"/// 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]={{q,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_ClassTemplateMember:\n    S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}}
},
},
["err_template_parameter_pack_non_pack"]={
["err_template_parameter_pack_non_pack"]={
Line 5,275: Line 5,275:
[j]=o,
[j]=o,
[c]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[c]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template"},
[k]={{q,6588,"/// 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]={{q,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}}
},
},
["err_template_qualified_declarator_no_match"]={
["err_template_qualified_declarator_no_match"]={
Line 5,287: Line 5,287:
[j]=o,
[j]=o,
[c]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but"},
[c]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but"},
[k]={{t,5594,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getCXXScopeSpec().isInvalid())\n  else if (D.getCXXScopeSpec().isSet()) {\n    if (!DC || isa<EnumDecl>(DC)) {\n      Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{q,1559,"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]={{t,6289,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getCXXScopeSpec().isInvalid())\n  else if (D.getCXXScopeSpec().isSet()) {\n    if (!DC || isa<EnumDecl>(DC)) {\n      Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{q,1862,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  if (SS.isNotEmpty() && !SS.isInvalid()) {\n    if (!SemanticContext) {\n      Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}}
},
},
["err_template_recursion_depth_exceeded"]={
["err_template_recursion_depth_exceeded"]={
Line 5,299: Line 5,299:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",500,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}}
[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}}
},
},
["err_template_spec_decl_friend"]={
["err_template_spec_decl_friend"]={
Line 5,311: Line 5,311:
[j]=o,
[j]=o,
[c]={"816d75b7012a",1269416766,"Support friend function specializations."},
[c]={"816d75b7012a",1269416766,"Support friend function specializations."},
[k]={{t,8645,"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]={{t,9845,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  if (getLangOpts().CPlusPlus) {\n    if (TemplateParams) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n        if (isFriend) {\n          Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}}
},
},
["err_template_spec_decl_function_scope"]={
["err_template_spec_decl_function_scope"]={
Line 5,323: Line 5,323:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6912,"/// 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]={{q,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p2:\n  //  An explicit specialization may be declared in any scope in which\n  //  the corresponding primary template may be defined.\n  if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n    S.Diag(Loc, diag::err_template_spec_decl_function_scope) << Specialized;"}}
},
},
["err_template_spec_default_arg"]={
["err_template_spec_default_arg"]={
Line 5,335: Line 5,335:
[j]=o,
[j]=o,
[c]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a"},
[c]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a"},
[k]={{y,559,"/// 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]={{y,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    if (OldParamHasDfl && NewParamHasDfl) {\n    } else if (OldParamHasDfl) {\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}}
},
},
["err_template_spec_extra_headers"]={
["err_template_spec_extra_headers"]={
Line 5,347: Line 5,347:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,3011,"/// 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]={{q,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    if (!SuppressDiagnostic)\n      Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}}
},
},
["err_template_spec_friend"]={
["err_template_spec_friend"]={
Line 5,359: Line 5,359:
[j]=o,
[j]=o,
[c]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend"},
[c]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend"},
[k]={{q,7137,"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]={{q,8698,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  if (TemplateParams && TemplateParams->size() > 0) {\n  } else if (TemplateParams) {\n    if (TUK == TUK_Friend)\n      Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}}
},
},
["err_template_spec_needs_header"]={
["err_template_spec_needs_header"]={
Line 5,371: Line 5,371:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,2852,"/// 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]={{q,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n    if (!SuppressDiagnostic)\n      Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}}
},
},
["err_template_spec_needs_template_parameters"]={
["err_template_spec_needs_template_parameters"]={
Line 5,383: Line 5,383:
[j]=o,
[j]=o,
[c]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the"},
[c]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the"},
[k]={{q,2977,"/// 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]={{q,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    if (NeedNonemptyTemplateHeader) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}}
},
},
["err_template_spec_redecl_global_scope"]={
["err_template_spec_redecl_global_scope"]={
Line 5,395: Line 5,395:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6926,"/// 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]={{q,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n      S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}}
},
},
["err_template_spec_redecl_out_of_scope"]={
["err_template_spec_redecl_out_of_scope"]={
Line 5,407: Line 5,407:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,6929,"/// 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]={{q,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n    else {\n      int Diag = diag::err_template_spec_redecl_out_of_scope;"}}
},
},
["err_template_spec_syntax_non_template"]={
["err_template_spec_syntax_non_template"]={
Line 5,419: Line 5,419:
[j]=u,
[j]=u,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{bb,1545,"#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]={{bb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n  if (Tok.is(tok::identifier)) {\n  } else if (Tok.is(tok::annot_template_id)) {\n    if (TemplateId && !TemplateId->mightBeType()) {\n      Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}}
},
},
["err_template_spec_unknown_kind"]={
["err_template_spec_unknown_kind"]={
Line 5,431: Line 5,431:
[j]=o,
[j]=o,
[c]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[c]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization"},
[k]={{q,6903,"/// 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]={{q,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  if (isa<ClassTemplateDecl>(Specialized))\n  else if (isa<VarTemplateDecl>(Specialized))\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  else if (isa<CXXMethodDecl>(Specialized))\n  else if (isa<VarDecl>(Specialized))\n  else if (isa<RecordDecl>(Specialized))\n  else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  else {\n    S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}}
},
},
["err_template_tag_noparams"]={
["err_template_tag_noparams"]={
Line 5,443: Line 5,443:
[j]=o,
[j]=o,
[c]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class"},
[c]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class"},
[k]={{t,14675,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // We only need to do this matching if we have template parameters\n  // or a scope specifier, which also conveniently avoids this work\n  // for non-C++ cases.\n  if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n    if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{y,14711,"/// 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]={{t,16817,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // We only need to do this matching if we have template parameters\n  // or a scope specifier, which also conveniently avoids this work\n  // for non-C++ cases.\n  if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n    if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n      if (TemplateParams->size() > 0) {\n      } else {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{y,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n  if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n    if (TemplateParams->size() > 0) {\n    } else {\n      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}}
},
},
["err_template_template_parameter_not_at_least_as_constrained"]={
["err_template_template_parameter_not_at_least_as_constrained"]={
Line 5,455: Line 5,455:
[j]=o,
[j]=o,
[c]={kb,1576172311,lb},
[c]={kb,1576172311,lb},
[k]={{q,6415,"/// 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]={{q,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}}
},
},
["err_template_template_parm_no_parms"]={
["err_template_template_parm_no_parms"]={
Line 5,467: Line 5,467:
[j]=o,
[j]=o,
[c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"},
[c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that"},
[k]={{q,1394,"/// 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]={{q,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  if (Params->size() == 0) {\n    Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}}
},
},
["err_template_typedef"]={
["err_template_typedef"]={
Line 5,479: Line 5,479:
[j]=o,
[j]=o,
[c]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to"},
[c]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to"},
[k]={{t,5717,"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]={{t,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n    if (TemplateParamLists.size()) {\n      Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}}
},
},
["err_template_unnamed_class"]={
["err_template_unnamed_class"]={
Line 5,491: Line 5,491:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{q,1544,"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]={{q,1842,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // There is no such thing as an unnamed class template.\n  if (!Name) {\n    Diag(KWLoc, diag::err_template_unnamed_class);"}}
},
},
["err_template_variable_noparams"]={
["err_template_variable_noparams"]={
Line 5,503: Line 5,503:
[j]=o,
[j]=o,
[c]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static"},
[c]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static"},
[k]={{t,6781,"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]={{t,7631,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}}
},
},
["err_templated_invalid_declaration"]={
["err_templated_invalid_declaration"]={
Line 5,515: Line 5,515:
[j]=u,
[j]=u,
[c]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently..."},
[c]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently..."},
[k]={{rb,173,"/// 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]={{rb,197,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  if (Tok.is(tok::kw_static_assert)) {\n    Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}}
},
},
["err_templated_using_directive_declaration"]={
["err_templated_using_directive_declaration"]={
Line 5,527: Line 5,527:
[j]=u,
[j]=u,
[c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[k]={{bb,445,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n  // \'using namespace\' means this is a using-directive.\n  if (Tok.is(tok::kw_namespace)) {\n    // Template parameters are always an error here.\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{bb,623,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{bb,710,"/// 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]={{bb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n  // \'using namespace\' means this is a using-directive.\n  if (Tok.is(tok::kw_namespace)) {\n    // Template parameters are always an error here.\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{bb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    if (TemplateInfo.Kind) {\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{bb,806,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // Diagnose an attempt to declare a templated using-declaration.\n  // In C++11, alias-declarations can be templates:\n  //  template <...> using id = type;\n  if (TemplateInfo.Kind) {\n    Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}}
},
},
["err_tentative_def_incomplete_type"]={
["err_tentative_def_incomplete_type"]={
Line 5,539: Line 5,539:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{hb,1159,"/// 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]={{hb,1314,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n    } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}}
},
},
["err_test_module_file_extension_format"]={
["err_test_module_file_extension_format"]={
Line 5,551: Line 5,551:
[j]=a,
[j]=a,
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2288,"#include \"clang/Driver/Options.inc\"\n  for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n    if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n      Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}}
[k]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n  for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n    if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n      Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}}
},
},
["err_test_module_file_extension_version"]={
["err_test_module_file_extension_version"]={
Line 5,563: Line 5,563:
[j]=a,
[j]=a,
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[k]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",97,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n  if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n    Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}}
[k]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n  if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n    Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}}
},
},
["err_this_capture"]={
["err_this_capture"]={
Line 5,575: Line 5,575:
[j]="Lambda Issue",
[j]="Lambda Issue",
[c]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which"},
[c]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which"},
[k]={{E,1191,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n        // This context can\'t implicitly capture \'this\'; fail out.\n        if (BuildAndDiagnose) {\n          Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{E,1208,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      // This context can\'t implicitly capture \'this\'; fail out.\n      if (BuildAndDiagnose)\n        Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{yb,903,"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]={{E,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n        // This context can\'t implicitly capture \'this\'; fail out.\n        if (BuildAndDiagnose) {\n          Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{E,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      // This context can\'t implicitly capture \'this\'; fail out.\n      if (BuildAndDiagnose)\n        Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{yb,1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (ThisCaptureType.isNull()) {\n        Diag(C->Loc, diag::err_this_capture) << true;"}}
},
},
["err_this_captured_by_reference"]={
["err_this_captured_by_reference"]={
Line 5,587: Line 5,587:
[j]=u,
[j]=u,
[c]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from"},
[c]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from"},
[k]={{cb,894,"/// 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]={{cb,969,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  while (Tok.isNot(tok::r_square)) {\n    if (Tok.is(tok::star)) {\n    } else if (Tok.is(tok::kw_this)) {\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n    } else {\n      if (Tok.is(tok::identifier)) {\n      } else if (Tok.is(tok::kw_this)) {\n        return Invalid([&] {\n          Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}}
},
},
["err_this_static_member_func"]={
["err_this_static_member_func"]={
Line 5,599: Line 5,599:
[j]=o,
[j]=o,
[c]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"},
[c]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'"},
[k]={{y,15890,"/// 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]={{y,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n  bool VisitCXXThisExpr(CXXThisExpr *E) {\n    S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}}
},
},
["err_thread_dynamic_init"]={
["err_thread_dynamic_init"]={
Line 5,611: Line 5,611:
[j]=o,
[j]=o,
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[k]={{t,12323,"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]={{t,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}}
},
},
["err_thread_non_global"]={
["err_thread_non_global"]={
Line 5,623: Line 5,623:
[j]=o,
[j]=o,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[k]={{t,6883,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{O,6457,"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]={{t,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{O,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VD->hasLocalStorage()) {\n    S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}}
},
},
["err_thread_non_thread"]={
["err_thread_non_thread"]={
Line 5,635: Line 5,635:
[j]=o,
[j]=o,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers."},
[k]={{t,4209,"/// 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]={{t,4707,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n      Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}}
},
},
["err_thread_nontrivial_dtor"]={
["err_thread_nontrivial_dtor"]={
Line 5,647: Line 5,647:
[j]=o,
[j]=o,
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer"},
[k]={{t,12314,"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]={{t,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n      Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}}
},
},
["err_thread_thread_different_kind"]={
["err_thread_thread_different_kind"]={
Line 5,659: Line 5,659:
[j]=o,
[j]=o,
[c]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."},
[c]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST."},
[k]={{t,4219,"/// 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]={{t,4717,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n    } else if (!New->getTLSKind()) {\n    } else {\n      Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}}
},
},
["err_thread_unsupported"]={
["err_thread_unsupported"]={
Line 5,671: Line 5,671:
[j]=o,
[j]=o,
[c]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it."},
[c]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it."},
[k]={{t,6895,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n    else if (!Context.getTargetInfo().isTLSSupported()) {\n      if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n      } else\n        Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{t,6991,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{t,6994,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n      targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{O,6449,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.Context.getTargetInfo().isTLSSupported()) {\n    S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{p,355,"/// 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]={{t,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n    // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n    // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n    else if (!Context.getTargetInfo().isTLSSupported()) {\n      if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n      } else\n        Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{t,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{t,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n      targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{O,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!S.Context.getTargetInfo().isTLSSupported()) {\n    S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{p,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n    if (!Context.getTargetInfo().isTLSSupported())\n      if (const auto *VD = dyn_cast<VarDecl>(D))\n        if (VD->getTLSKind() != VarDecl::TLS_None)\n          targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}}
},
},
["err_three_way_vector_comparison"]={
["err_three_way_vector_comparison"]={
Line 5,683: Line 5,683:
[j]=a,
[j]=a,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{p,11606,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"},{p,11663,"QualType Sema::CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"}}
[k]={{p,13510,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"},{p,13671,"QualType Sema::CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"}}
},
},
["err_throw_abstract_type"]={
["err_throw_abstract_type"]={
Line 5,695: Line 5,695:
[j]=o,
[j]=o,
[c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."},
[c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type."},
[k]={{E,903,"/// 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]={{E,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}}
},
},
["err_throw_incomplete"]={
["err_throw_incomplete"]={
Line 5,707: Line 5,707:
[j]=o,
[j]=o,
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[k]={{E,895,"/// 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]={{E,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}}
},
},
["err_throw_incomplete_ptr"]={
["err_throw_incomplete_ptr"]={
Line 5,719: Line 5,719:
[j]=o,
[j]=o,
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot..."},
[k]={{E,895,"/// 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]={{E,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}}
},
},
["err_throw_sizeless"]={
["err_throw_sizeless"]={
Line 5,731: Line 5,731:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{E,899,"/// 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]={{E,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  if (!isPointer || !Ty->isVoidType()) {\n    if (!isPointer && Ty->isSizelessType()) {\n      Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}}
},
},
["err_tls_var_aligned_over_maximum"]={
["err_tls_var_aligned_over_maximum"]={
Line 5,743: Line 5,743:
[j]=o,
[j]=o,
[c]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it"},
[c]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it"},
[k]={{t,12557,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n  // Perform TLS alignment check here after attributes attached to the variable\n  // which may affect the alignment have been processed. Only perform the check\n  // if the target has a maximum TLS alignment (zero means no constraints).\n  if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n    // Protect the check so that it\'s not performed on dependent types and\n    // dependent alignments (we can\'t determine the alignment in that case).\n    if (!VD->hasDependentAlignment()) {\n      if (Context.getDeclAlign(VD) > MaxAlignChars) {\n        Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{O,3939,"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]={{t,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n  // Perform TLS alignment check here after attributes attached to the variable\n  // which may affect the alignment have been processed. Only perform the check\n  // if the target has a maximum TLS alignment (zero means no constraints).\n  if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n    // Protect the check so that it\'s not performed on dependent types and\n    // dependent alignments (we can\'t determine the alignment in that case).\n    if (!VD->hasDependentAlignment()) {\n      if (Context.getDeclAlign(VD) > MaxAlignChars) {\n        Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{O,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  if (VD) {\n    if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n      Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}}
},
},
["err_too_few_args_in_macro_invoc"]={
["err_too_few_args_in_macro_invoc"]={
Line 5,755: Line 5,755:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{jb,952,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n    } else if (!ContainsCodeCompletionTok) {\n      Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{jb,1267,"/// 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]={{jb,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n    } else if (!ContainsCodeCompletionTok) {\n      Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{jb,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::r_paren:\n      // The last \')\' has been reached; return the value if one found or\n      // a diagnostic and a dummy value.\n      if (Result) {\n      } else {\n        if (!SuppressDiagnostic)\n          PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}}
},
},
["err_too_large_for_fixed_point"]={
["err_too_large_for_fixed_point"]={
Line 5,767: Line 5,767:
[j]=a,
[j]=a,
[c]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"},
[c]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals"},
[k]={{p,3503,"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]={{p,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n    if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n    else if (Val.ugt(MaxVal) || Overflowed)\n      Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}}
},
},
["err_too_many_args_in_macro_invoc"]={
["err_too_many_args_in_macro_invoc"]={
Line 5,779: Line 5,779:
[j]=x,
[j]=x,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{jb,874,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{jb,972,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n    Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{jb,1237,"/// 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]={{jb,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{jb,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n    Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{jb,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    case tok::comma:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}}
},
},
["err_toomany_element_decls"]={
["err_toomany_element_decls"]={
Line 5,791: Line 5,791:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{K,2000,"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]={{K,2296,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  if (First) {\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      if (!DS->isSingleDecl())\n        return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}}
},
},
["err_trailing_requires_clause_on_deduction_guide"]={
["err_trailing_requires_clause_on_deduction_guide"]={
Line 5,803: Line 5,803:
[j]=o,
[j]=o,
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[k]={{t,8137,"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]={{t,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n    if (TrailingRequiresClause)\n      SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}}
},
},
["err_trailing_return_in_parens"]={
["err_trailing_return_in_parens"]={
Line 5,815: Line 5,815:
[j]=o,
[j]=o,
[c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"},
[c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:"},
[k]={{F,4603,"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]={{F,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n            S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}}
},
},
["err_trailing_return_without_auto"]={
["err_trailing_return_without_auto"]={
Line 5,827: Line 5,827:
[j]=o,
[j]=o,
[c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,"},
[k]={{F,4615,"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]={{F,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n          } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n          } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}}
},
},
["err_two_right_angle_brackets_need_space"]={
["err_two_right_angle_brackets_need_space"]={
Line 5,839: Line 5,839:
[j]=u,
[j]=u,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{rb,1046,"/// 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]={{rb,1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}}
},
},
["err_type_attribute_wrong_type"]={
["err_type_attribute_wrong_type"]={
Line 5,851: Line 5,851:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{F,100,"/// 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]={{F,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n  S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}}
},
},
["err_type_available_only_in_default_eval_method"]={
["err_type_available_only_in_default_eval_method"]={
Line 5,863: Line 5,863:
[j]=a,
[j]=a,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{p,345,"/// 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]={{p,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n    if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n      Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}}
},
},
["err_type_constraint_missing_arguments"]={
["err_type_constraint_missing_arguments"]={
Line 5,875: Line 5,875:
[j]=o,
[j]=o,
[c]={kb,1576172311,lb},
[c]={kb,1576172311,lb},
[k]={{q,953,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}}
[k]={{q,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}}
},
},
["err_type_constraint_non_type_concept"]={
["err_type_constraint_non_type_concept"]={
Line 5,887: Line 5,887:
[j]=o,
[j]=o,
[c]={kb,1576172311,lb},
[c]={kb,1576172311,lb},
[k]={{q,946,"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]={{q,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  // C++2a [temp.param]p4:\n  //    [...] The concept designated by a type-constraint shall be a type\n  //    concept ([temp.concept]).\n  if (!CD->isTypeConcept()) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}}
},
},
["err_type_defined_in_alias_template"]={
["err_type_defined_in_alias_template"]={
Line 5,899: Line 5,899:
[j]=o,
[j]=o,
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates."},
[k]={{F,3315,"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]={{F,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::AliasTemplate:\n      DiagID = diag::err_type_defined_in_alias_template;"}}
},
},
["err_type_defined_in_condition"]={
["err_type_defined_in_condition"]={
Line 5,911: Line 5,911:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{F,3343,"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]={{F,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::Condition:\n      DiagID = diag::err_type_defined_in_condition;"}}
},
},
["err_type_defined_in_enum"]={
["err_type_defined_in_enum"]={
Line 5,923: Line 5,923:
[j]=o,
[j]=o,
[c]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration."},
[c]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration."},
[k]={{t,15358,"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]={{t,17563,"CreateNewDecl:\n  if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n    Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}}
},
},
["err_type_defined_in_for_range"]={
["err_type_defined_in_for_range"]={
Line 5,935: Line 5,935:
[j]=o,
[j]=o,
[c]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[c]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[k]={{K,2177,"/// 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]={{K,2504,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (!DS->isSingleDecl()) {\n    Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}}
},
},
["err_type_defined_in_param_type"]={
["err_type_defined_in_param_type"]={
Line 5,947: Line 5,947:
[j]=o,
[j]=o,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[k]={{t,15417,"CreateNewDecl:\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n      // C++ [dcl.fct]p6:\n      //  Types shall not be defined in return or parameter types.\n      if (TUK == TUK_Definition && !IsTypeSpecifier) {\n        Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{F,3337,"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]={{t,17629,"CreateNewDecl:\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n      // C++ [dcl.fct]p6:\n      //  Types shall not be defined in return or parameter types.\n      if (TUK == TUK_Definition && !IsTypeSpecifier) {\n        Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{F,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::RequiresExpr:\n      DiagID = diag::err_type_defined_in_param_type;"}}
},
},
["err_type_defined_in_result_type"]={
["err_type_defined_in_result_type"]={
Line 5,959: Line 5,959:
[j]=o,
[j]=o,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[k]={{F,4770,"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]={{F,5411,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n        S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}}
},
},
["err_type_defined_in_type_specifier"]={
["err_type_defined_in_type_specifier"]={
Line 5,971: Line 5,971:
[j]=o,
[j]=o,
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag"},
[k]={{t,15353,"CreateNewDecl:\n  // C++11 [dcl.type]p3:\n  //  A type-specifier-seq shall not define a class or enumeration [...].\n  if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n    Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{F,3327,"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]={{t,17556,"CreateNewDecl:\n  // C++11 [dcl.type]p3:\n  //  A type-specifier-seq shall not define a class or enumeration [...].\n  if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n    Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{F,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    case DeclaratorContext::Association:\n      DiagID = diag::err_type_defined_in_type_specifier;"}}
},
},
["err_type_mismatch_continuation_class"]={
["err_type_mismatch_continuation_class"]={
Line 5,983: Line 5,983:
[j]=o,
[j]=o,
[c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "},
[c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in "},
[k]={{Q,450,"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]={{Q,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n      Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}}
},
},
["err_type_pack_element_out_of_bounds"]={
["err_type_pack_element_out_of_bounds"]={
Line 5,995: Line 5,995:
[j]=o,
[j]=o,
[c]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."},
[c]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne."},
[k]={{q,3113,"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]={{q,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  case BTK__type_pack_element:\n    // If the Index is out of bounds, the program is ill-formed.\n    if (Index >= Ts.pack_size()) {\n      SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}}
},
},
["err_type_safety_unknown_flag"]={
["err_type_safety_unknown_flag"]={
Line 6,007: Line 6,007:
[j]=u,
[j]=u,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{R,1484,"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]={{R,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  while (TryConsumeToken(tok::comma)) {\n    if (Flag->isStr(\"layout_compatible\"))\n    else if (Flag->isStr(\"must_be_null\"))\n    else {\n      Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}}
},
},
["err_type_tag_for_datatype_not_ice"]={
["err_type_tag_for_datatype_not_ice"]={
Line 6,019: Line 6,019:
[j]=o,
[j]=o,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{t,12675,"/// 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]={{t,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}
},
},
["err_type_tag_for_datatype_too_large"]={
["err_type_tag_for_datatype_too_large"]={
Line 6,031: Line 6,031:
[j]=o,
[j]=o,
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"},
[k]={{t,12679,"/// 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]={{t,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    if (MagicValueInt->getActiveBits() > 64) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_too_large) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}
},
},
["err_type_trait_arity"]={
["err_type_trait_arity"]={
Line 6,043: Line 6,043:
[j]=u,
[j]=u,
[c]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)"},
[c]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)"},
[k]={{E,4783,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (Arity && N != Arity) {\n    Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{E,4788,"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]={{E,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (Arity && N != Arity) {\n    Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{E,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (!Arity && N == 0) {\n    Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}}
},
},
["err_type_unsupported"]={
["err_type_unsupported"]={
Line 6,055: Line 6,055:
[j]=o,
[j]=o,
[c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"},
[c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang"},
[k]={{F,1269,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_bitint: {\n    if (!S.Context.getTargetInfo().hasBitIntType())\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{F,1325,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int128:\n    if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{F,1336,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float16:\n    // CUDA host and device may have different _Float16 support, therefore\n    // do not diagnose _Float16 usage to avoid false alarm.\n    // ToDo: more precise diagnostics for CUDA.\n    if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{F,1344,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_BFloat16:\n    if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{F,1364,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float128:\n    if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{F,1369,"/// 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]={{F,1447,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_bitint: {\n    if (!S.Context.getTargetInfo().hasBitIntType())\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{F,1507,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int128:\n    if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{F,1520,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float16:\n    // CUDA host and device may have different _Float16 support, therefore\n    // do not diagnose _Float16 usage to avoid false alarm.\n    // ToDo: more precise diagnostics for CUDA.\n    if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{F,1529,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_BFloat16:\n    if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{F,1553,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_float128:\n    if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{F,1561,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_ibm128:\n    if (!S.Context.getTargetInfo().hasIbm128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__ibm128\";"}}
},
},
["err_typecheck_address_of"]={
["err_typecheck_address_of"]={
Line 6,067: Line 6,067:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{hb,594,"#endif\n  if (Kind == CK_ArrayToPointerDecay) {\n    // C17 6.7.1p6 footnote 124: The implementation can treat any register\n    // declaration simply as an auto declaration. However, whether or not\n    // addressable storage is actually used, the address of any part of an\n    // object declared with storage-class specifier register cannot be\n    // computed, either explicitly(by use of the unary & operator as discussed\n    // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n    // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n    // array declared with storage-class specifier register is sizeof.\n    if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n      if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n        if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n          if (VD->getStorageClass() == SC_Register) {\n            Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{p,12793,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}}
[k]={{hb,688,"#endif\n  if (Kind == CK_ArrayToPointerDecay) {\n    // C17 6.7.1p6 footnote 124: The implementation can treat any register\n    // declaration simply as an auto declaration. However, whether or not\n    // addressable storage is actually used, the address of any part of an\n    // object declared with storage-class specifier register cannot be\n    // computed, either explicitly(by use of the unary & operator as discussed\n    // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n    // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n    // array declared with storage-class specifier register is sizeof.\n    if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n      if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n        if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n          if (VD->getStorageClass() == SC_Register) {\n            Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{p,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}}
},
},
["err_typecheck_addrof_dtor"]={
["err_typecheck_addrof_dtor"]={
Line 6,079: Line 6,079:
[j]=o,
[j]=o,
[c]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."},
[c]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2."},
[k]={{p,12914,"/// 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]={{p,14994,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n    // Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n    if (isa<CXXDestructorDecl>(MD))\n      Diag(OpLoc, diag::err_typecheck_addrof_dtor) << op->getSourceRange();"}}
},
},
["err_typecheck_addrof_temporary"]={
["err_typecheck_addrof_temporary"]={
Line 6,091: Line 6,091:
[j]=o,
[j]=o,
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[k]={{p,12878,"/// 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]={{p,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n    Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}
},
},
["err_typecheck_ambiguous_condition"]={
["err_typecheck_ambiguous_condition"]={
Line 6,103: Line 6,103:
[j]=o,
[j]=o,
[c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."},
[c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails."},
[k]={{E,3593,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ImplicitConversionSequence::AmbiguousConversion:\n    ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{D,8173,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"},{ab,3220,"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]={{E,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ImplicitConversionSequence::AmbiguousConversion:\n    ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{D,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"},{ab,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n    Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}}
},
},
["err_typecheck_arc_assign_externally_retained"]={
["err_typecheck_arc_assign_externally_retained"]={
Line 6,115: Line 6,115:
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[c]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[k]={{p,12318,"/// 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]={{p,14313,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n            DiagID = diag::err_typecheck_arc_assign_externally_retained;"}}
},
},
["err_typecheck_arc_assign_self"]={
["err_typecheck_arc_assign_self"]={
Line 6,127: Line 6,127:
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[k]={{p,12314,"/// 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]={{p,14309,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n            DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}
},
},
["err_typecheck_arc_assign_self_class_method"]={
["err_typecheck_arc_assign_self_class_method"]={
Line 6,139: Line 6,139:
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>."},
[k]={{p,12314,"/// 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]={{p,14304,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n            DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}
},
},
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
Line 6,151: Line 6,151:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,9928,"/// 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]={{p,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n  return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}}
},
},
["err_typecheck_arr_assign_enumeration"]={
["err_typecheck_arr_assign_enumeration"]={
Line 6,163: Line 6,163:
[j]="ARC Semantic Issue",
[j]="ARC Semantic Issue",
[c]={"31168b077c36",1308178962,"Automatic Reference Counting."},
[c]={"31168b077c36",1308178962,"Automatic Reference Counting."},
[k]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",57,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n  bool VisitBinaryOperator(BinaryOperator *Exp) {\n    if (declRef && isa<VarDecl>(declRef->getDecl())) {\n      if (var->isARCPseudoStrong()) {\n        if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{p,12322,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n          } else {\n            DiagID = diag::err_typecheck_arr_assign_enumeration;"}}
[k]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n  bool VisitBinaryOperator(BinaryOperator *Exp) {\n    if (declRef && isa<VarDecl>(declRef->getDecl())) {\n      if (var->isARCPseudoStrong()) {\n        if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{p,14343,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ConstQualified:\n    // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'.  These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n          if (method && var == method->getSelfDecl()) {\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n          } else {\n            DiagID = diag::err_typecheck_arr_assign_enumeration;"}}
},
},
["err_typecheck_array_not_modifiable_lvalue"]={
["err_typecheck_array_not_modifiable_lvalue"]={
Line 6,175: Line 6,175:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12352,"/// 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]={{p,14347,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ArrayTemporary:\n    DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}}
},
},
["err_typecheck_assign_const"]={
["err_typecheck_assign_const"]={
Line 6,187: Line 6,187:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12150,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{p,12160,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{p,12184,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      if (!DiagnosticEmitted) {\n        S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{p,12194,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{p,12205,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{p,12218,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{p,12236,"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]={{p,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{p,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // Loop to process MemberExpr chains.\n  while (true) {\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{p,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n      if (!DiagnosticEmitted) {\n        S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{p,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{p,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{p,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{p,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      if (FieldTy.isConstQualified()) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}}
},
},
["err_typecheck_bool_condition"]={
["err_typecheck_bool_condition"]={
Line 6,199: Line 6,199:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{ab,4869,"/// 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]={{ab,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n    return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}}
},
},
["err_typecheck_call_different_arg_types"]={
["err_typecheck_call_different_arg_types"]={
Line 6,211: Line 6,211:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,2418,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_elementwise_copysign: {\n    if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n      return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{v,7861,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n    return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{v,16671,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n  if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n    return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{v,16702,"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]={{v,2724,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_elementwise_copysign: {\n    if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n      return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{v,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n    return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{v,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n  if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n    return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{v,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n  for (int I = 1; I < 3; ++I) {\n    if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n      return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}}
},
},
["err_typecheck_call_invalid_ordered_compare"]={
["err_typecheck_call_invalid_ordered_compare"]={
Line 6,223: Line 6,223:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,7769,"/// 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]={{v,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends.  This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n  // If the common type isn\'t a real floating type, then the arguments were\n  // invalid for this operation.\n  if (Res.isNull() || !Res->isRealFloatingType())\n    return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}}
},
},
["err_typecheck_call_invalid_unary_fp"]={
["err_typecheck_call_invalid_unary_fp"]={
Line 6,235: Line 6,235:
[j]=o,
[j]=o,
[c]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they "},
[c]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they "},
[k]={{v,7816,"/// 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]={{v,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends.  This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n  // This operation requires a non-_Complex floating-point number.\n  if (!OrigArg->getType()->isRealFloatingType())\n    return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}}
},
},
["err_typecheck_call_not_function"]={
["err_typecheck_call_not_function"]={
Line 6,247: Line 6,247:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,6380,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n      if (!FuncT)\n        return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{p,6393,"/// 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]={{p,7417,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n      if (!FuncT)\n        return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{p,7483,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n    } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n    } else {\n      return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}}
},
},
["err_typecheck_call_requires_real_fp"]={
["err_typecheck_call_requires_real_fp"]={
Line 6,259: Line 6,259:
[j]=o,
[j]=o,
[c]={T,1582847864,S},
[c]={T,1582847864,S},
[k]={{v,7844,"/// 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]={{v,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  for (unsigned I = 0; I != 2; ++I) {\n    // Despite supporting _Complex int, GCC requires a real floating point type\n    // for the operands of __builtin_complex.\n    if (!T->isRealFloatingType()) {\n      return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}}
},
},
["err_typecheck_call_too_few_args"]={
["err_typecheck_call_too_few_args"]={
Line 6,271: Line 6,271:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,118,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{v,6742,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n    Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{v,8129,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs < NumRequiredArgs) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{p,5604,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{db,1463,"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]={{v,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{v,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n    Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{v,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs < NumRequiredArgs) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{p,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{db,1803,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // FIXME. This need be cleaned up.\n  if (Args.size() < NumNamedArgs) {\n    Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}}
},
},
["err_typecheck_call_too_few_args_at_least"]={
["err_typecheck_call_too_few_args_at_least"]={
Line 6,283: Line 6,283:
[j]=o,
[j]=o,
[c]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number"},
[c]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number"},
[k]={{v,194,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // We need at least one argument.\n  if (TheCall->getNumArgs() < 1) {\n    S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{v,1351,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  if (NumArgs < 4) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{v,7094,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Ensure that we have at least one argument to do type inference from.\n  if (TheCall->getNumArgs() < 1) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{v,7357,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Now that we know how many fixed arguments we expect, first check that we\n  // have at least that many.\n  if (TheCall->getNumArgs() < 1 + NumFixed) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{v,7707,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Call->getNumArgs() < 3)\n    return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{v,7918,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() < 2)\n    return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{p,5604,"/// 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]={{v,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // We need at least one argument.\n  if (TheCall->getNumArgs() < 1) {\n    S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{v,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  if (NumArgs < 4) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{v,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Ensure that we have at least one argument to do type inference from.\n  if (TheCall->getNumArgs() < 1) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{v,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // Now that we know how many fixed arguments we expect, first check that we\n  // have at least that many.\n  if (TheCall->getNumArgs() < 1 + NumFixed) {\n    Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{v,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Call->getNumArgs() < 3)\n    return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{v,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() < 2)\n    return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{p,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}}
},
},
["err_typecheck_call_too_few_args_at_least_one"]={
["err_typecheck_call_too_few_args_at_least_one"]={
Line 6,295: Line 6,295:
[j]=o,
[j]=o,
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[k]={{p,5602,"/// 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]={{p,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}}
},
},
["err_typecheck_call_too_few_args_at_least_suggest"]={
["err_typecheck_call_too_few_args_at_least_suggest"]={
Line 6,307: Line 6,307:
[j]=o,
[j]=o,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,5599,"/// 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]={{p,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}
},
},
["err_typecheck_call_too_few_args_one"]={
["err_typecheck_call_too_few_args_one"]={
Line 6,319: Line 6,319:
[j]=o,
[j]=o,
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function"},
[k]={{p,5602,"/// 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]={{p,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}}
},
},
["err_typecheck_call_too_few_args_suggest"]={
["err_typecheck_call_too_few_args_suggest"]={
Line 6,331: Line 6,331:
[j]=o,
[j]=o,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,5599,"/// 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]={{p,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}
},
},
["err_typecheck_call_too_many_args"]={
["err_typecheck_call_too_many_args"]={
Line 6,343: Line 6,343:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,150,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking.  Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n  return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{v,6745,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n  } else if (Args.size() > AdjustedNumArgs) {\n    Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{v,7064,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() != 0) {\n    Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{p,5628,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{db,1545,"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]={{v,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking.  Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n  return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{v,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n  } else if (Args.size() > AdjustedNumArgs) {\n    Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{v,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() != 0) {\n    Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{p,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{db,1900,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // Promote additional arguments to variadic methods.\n  if (Method->isVariadic()) {\n  } else {\n    // Check for extra arguments to non-variadic methods.\n    if (Args.size() != NumNamedArgs) {\n      Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}}
},
},
["err_typecheck_call_too_many_args_at_most"]={
["err_typecheck_call_too_many_args_at_most"]={
Line 6,355: Line 6,355:
[j]=o,
[j]=o,
[c]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give"},
[c]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give"},
[k]={{v,128,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{v,8005,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n  if (NumArgs > 3)\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{v,8132,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs >= NumRequiredArgs + 0x100) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{p,5628,"/// 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]={{v,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{v,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n  if (NumArgs > 3)\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{v,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  if (NumArgs >= NumRequiredArgs + 0x100) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{p,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}
},
},
["err_typecheck_call_too_many_args_at_most_one"]={
["err_typecheck_call_too_many_args_at_most_one"]={
Line 6,367: Line 6,367:
[j]=o,
[j]=o,
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[k]={{p,5626,"/// 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]={{p,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}
},
},
["err_typecheck_call_too_many_args_at_most_suggest"]={
["err_typecheck_call_too_many_args_at_most_suggest"]={
Line 6,379: Line 6,379:
[j]=o,
[j]=o,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,5623,"/// 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]={{p,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}
},
},
["err_typecheck_call_too_many_args_one"]={
["err_typecheck_call_too_many_args_one"]={
Line 6,391: Line 6,391:
[j]=o,
[j]=o,
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including"},
[k]={{p,5626,"/// 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]={{p,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}}
},
},
["err_typecheck_call_too_many_args_suggest"]={
["err_typecheck_call_too_many_args_suggest"]={
Line 6,403: Line 6,403:
[j]=o,
[j]=o,
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments."},
[k]={{p,5623,"/// 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]={{p,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}
},
},
["err_typecheck_cast_to_incomplete"]={
["err_typecheck_cast_to_incomplete"]={
Line 6,415: Line 6,415:
[j]=o,
[j]=o,
[c]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to"},
[c]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to"},
[k]={{eb,2565,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{eb,2806,"void CastOperation::CheckBuiltinBitCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{p,18630,"/// 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]={{eb,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{eb,3257,"void CastOperation::CheckBuiltinBitCast() {\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{p,21464,"/// Check a cast of an unknown-any type.  We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n  if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}}
},
},
["err_typecheck_cast_to_union_no_type"]={
["err_typecheck_cast_to_union_no_type"]={
Line 6,427: Line 6,427:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{eb,2606,"/// 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]={{eb,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    // GCC\'s cast to union extension.\n    if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n      if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n      } else {\n        Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}}
},
},
["err_typecheck_choose_expr_requires_constant"]={
["err_typecheck_choose_expr_requires_constant"]={
Line 6,439: Line 6,439:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,14540,"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]={{p,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n  if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n  } else {\n    ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}}
},
},
["err_typecheck_comparison_of_distinct_blocks"]={
["err_typecheck_comparison_of_distinct_blocks"]={
Line 6,451: Line 6,451:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,11413,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Handle block pointer types.\n  if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n    if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,11423,"// 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]={{p,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Handle block pointer types.\n  if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n    if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Allow block pointers to be compared with null pointer constants.\n  if (!IsOrdered && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) {\n    if (!LHSIsNull && !RHSIsNull) {\n      if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) || (LHSType->isPointerType() && LHSType->castAs<PointerType>()->getPointeeType()->isVoidType())))\n        Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_comparison_of_distinct_pointers"]={
["err_typecheck_comparison_of_distinct_pointers"]={
Line 6,463: Line 6,463:
[j]=o,
[j]=o,
[c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="},
[c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !="},
[k]={{p,10628,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
[k]={{p,12324,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
},
},
["err_typecheck_comparison_of_fptr_to_void"]={
["err_typecheck_comparison_of_fptr_to_void"]={
Line 6,475: Line 6,475:
[j]=o,
[j]=o,
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[k]={{p,10658,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
[k]={{p,12365,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
},
},
["err_typecheck_comparison_of_pointer_integer"]={
["err_typecheck_comparison_of_pointer_integer"]={
Line 6,487: Line 6,487:
[j]=o,
[j]=o,
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect"},
[k]={{p,11495,"// 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]={{p,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    if (LangOpts.DebuggerSupport) {\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n    } else if (getLangOpts().CPlusPlus) {\n      DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}}
},
},
["err_typecheck_cond_expect_int_float"]={
["err_typecheck_cond_expect_int_float"]={
Line 6,499: Line 6,499:
[j]=o,
[j]=o,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[k]={{p,7667,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{p,7672,"/// 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]={{p,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{p,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_cond_expect_nonfloat"]={
["err_typecheck_cond_expect_nonfloat"]={
Line 6,511: Line 6,511:
[j]=o,
[j]=o,
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector"},
[k]={{p,7431,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n  if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{p,7741,"/// 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]={{p,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n  if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{p,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}}
},
},
["err_typecheck_cond_expect_scalar"]={
["err_typecheck_cond_expect_scalar"]={
Line 6,523: Line 6,523:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{eb,2628,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{p,7439,"/// 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]={{eb,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{p,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}}
},
},
["err_typecheck_cond_incompatible_operands"]={
["err_typecheck_cond_incompatible_operands"]={
Line 6,535: Line 6,535:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,7585,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n    S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,7882,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // Diagnose attempts to convert between __ibm128, __float128 and long double\n  // where such conversions currently can\'t be handled.\n  if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n    Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,7899,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // If both operands have arithmetic type, do the usual arithmetic conversions\n  // to find a common type: C99 6.5.15p3,5.\n  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n    // Disallow invalid arithmetic conversions, such as those between bit-\n    // precise integers types of different sizes, or between a bit-precise\n    // integer and another type.\n    if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,7992,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{E,5404,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  case OR_No_Viable_Function:\n    Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{E,5834,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  //  -- The second and third operands have arithmetic or enumeration type;\n  //      the usual arithmetic conversions are performed to bring them to a\n  //      common type, and the result is of that type.\n  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {\n    if (ResTy.isNull()) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{E,5871,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[k]={{p,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n    S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // Diagnose attempts to convert between __ibm128, __float128 and long double\n  // where such conversions currently can\'t be handled.\n  if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n    Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // If both operands have arithmetic type, do the usual arithmetic conversions\n  // to find a common type: C99 6.5.15p3,5.\n  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n    // Disallow invalid arithmetic conversions, such as those between bit-\n    // precise integers types of different sizes, or between a bit-precise\n    // integer and another type.\n    if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,9334,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{E,6261,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  case OR_No_Viable_Function:\n    Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{E,6766,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  //  -- The second and third operands have arithmetic or enumeration type;\n  //      the usual arithmetic conversions are performed to bring them to a\n  //      common type, and the result is of that type.\n  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {\n    if (ResTy.isNull()) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{E,6804,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_cond_incompatible_operands_null"]={
["err_typecheck_cond_incompatible_operands_null"]={
Line 6,547: Line 6,547:
[j]=o,
[j]=o,
[c]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and"},
[c]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and"},
[k]={{p,7421,"/// 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]={{p,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer.  Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}}
},
},
["err_typecheck_convert_discards_qualifiers"]={
["err_typecheck_convert_discards_qualifiers"]={
Line 6,559: Line 6,559:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15305,"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]={{p,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case CompatiblePointerDiscardsQualifiers:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}}
},
},
["err_typecheck_convert_incompatible"]={
["err_typecheck_convert_incompatible"]={
Line 6,571: Line 6,571:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,4089,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n      if (TheCall->getArg(I)->getType() != ArgType)\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{v,7727,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n    Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{v,7734,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n    Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{v,8626,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n  while (*TypeStr != \'\\0\') {\n    // The only case where the argument type and expected type are allowed to\n    // mismatch is if the argument type is a non-void pointer (or array) and\n    // expected type is a void pointer.\n    if (StrippedRVType != ExpectedType)\n      if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n        return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{p,15377,"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]={{v,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  case PPC::BI__builtin_ppc_minfs: {\n    for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n      if (TheCall->getArg(I)->getType() != ArgType)\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{v,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n    Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{v,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n    Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{v,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n  while (*TypeStr != \'\\0\') {\n    // The only case where the argument type and expected type are allowed to\n    // mismatch is if the argument type is a non-void pointer (or array) and\n    // expected type is a void pointer.\n    if (StrippedRVType != ExpectedType)\n      if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n        return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{p,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case Incompatible:\n    DiagKind = diag::err_typecheck_convert_incompatible;"}}
},
},
["err_typecheck_convert_incompatible_block_pointer"]={
["err_typecheck_convert_incompatible_block_pointer"]={
Line 6,583: Line 6,583:
[j]=o,
[j]=o,
[c]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the"},
[c]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the"},
[k]={{p,15329,"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]={{p,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleBlockPointer:\n    DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}}
},
},
["err_typecheck_convert_incompatible_function_pointer"]={
["err_typecheck_convert_incompatible_function_pointer"]={
Line 6,595: Line 6,595:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15229,"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]={{p,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleFunctionPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}}
},
},
["err_typecheck_convert_incompatible_pointer"]={
["err_typecheck_convert_incompatible_pointer"]={
Line 6,607: Line 6,607:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15241,"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]={{p,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointer:\n    if (Action == AA_Passing_CFAudited) {\n    } else if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}}
},
},
["err_typecheck_convert_incompatible_pointer_sign"]={
["err_typecheck_convert_incompatible_pointer_sign"]={
Line 6,619: Line 6,619:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15257,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerSign:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{p,15413,"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]={{p,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerSign:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{p,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}}
},
},
["err_typecheck_convert_int_pointer"]={
["err_typecheck_convert_int_pointer"]={
Line 6,631: Line 6,631:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15214,"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]={{p,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IntToPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_int_pointer;"}}
},
},
["err_typecheck_convert_pointer_int"]={
["err_typecheck_convert_pointer_int"]={
Line 6,643: Line 6,643:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15204,"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]={{p,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case PointerToInt:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_int;"}}
},
},
["err_typecheck_convert_pointer_void_func"]={
["err_typecheck_convert_pointer_void_func"]={
Line 6,655: Line 6,655:
[j]=o,
[j]=o,
[c]={G,1576908663,H},
[c]={G,1576908663,H},
[k]={{p,15265,"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]={{p,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case FunctionVoidPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_void_func;"}}
},
},
["err_typecheck_converted_constant_expression"]={
["err_typecheck_converted_constant_expression"]={
Line 6,667: Line 6,667:
[j]=o,
[j]=o,
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[k]={{ab,4973,"/// 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]={{ab,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  case ImplicitConversionSequence::BadConversion:\n    if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n      return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}}
},
},
["err_typecheck_converted_constant_expression_disallowed"]={
["err_typecheck_converted_constant_expression_disallowed"]={
Line 6,679: Line 6,679:
[j]=o,
[j]=o,
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case"},
[k]={{ab,4983,"/// 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]={{ab,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // Check that we would only use permitted conversions.\n  if (!CheckConvertedConstantConversions(S, *SCS)) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}}
},
},
["err_typecheck_converted_constant_expression_indirect"]={
["err_typecheck_converted_constant_expression_indirect"]={
Line 6,691: Line 6,691:
[j]=o,
[j]=o,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments)."},
[k]={{ab,4987,"/// 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]={{ab,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // [...] and where the reference binding (if any) binds directly.\n  if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}}
},
},
["err_typecheck_decl_incomplete_type"]={
["err_typecheck_decl_incomplete_type"]={
Line 6,703: Line 6,703:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,14868,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{t,7710,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isVoidType()) {\n    // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n    //                    of objects and functions.\n    if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{t,11527,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (!VDecl->getType()->isDependentType()) {\n    if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{t,11909,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{t,11988,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{t,12024,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{t,12098,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->hasAttr<AliasAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{y,261,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n  if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{p,6617,"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]={{v,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  for (ParmVarDecl *Param : Parameters) {\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{t,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (T->isVoidType()) {\n    // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n    //                    of objects and functions.\n    if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{t,13202,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (!VDecl->getType()->isDependentType()) {\n    if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{t,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{t,13728,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{t,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    case VarDecl::DeclarationOnly:\n      if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{t,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    if (!Var->hasAttr<AliasAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{y,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n  if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{p,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}}
},
},
["err_typecheck_deleted_function"]={
["err_typecheck_deleted_function"]={
Line 6,715: Line 6,715:
[j]=o,
[j]=o,
[c]={Ab,1260399737,zb},
[c]={Ab,1260399737,zb},
[k]={{D,8185,"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]={{D,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_Deleted: {\n      S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}
},
},
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
Line 6,727: Line 6,727:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12373,"/// 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]={{p,14370,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_DuplicateVectorComponents:\n    DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}}
},
},
["err_typecheck_expect_flt_or_vector"]={
["err_typecheck_expect_flt_or_vector"]={
Line 6,739: Line 6,739:
[j]=o,
[j]=o,
[c]={pb,1615397021,ub},
[c]={pb,1615397021,ub},
[k]={{v,8028,"/// 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]={{v,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!ArgTy->hasFloatingRepresentation())\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}}
},
},
["err_typecheck_expect_int"]={
["err_typecheck_expect_int"]={
Line 6,751: Line 6,751:
[j]=o,
[j]=o,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[k]={{v,281,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if (!IsValidIntegerType(AlignOp->getType())) {\n    S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{v,4141,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n    return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{p,10455,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // The operands need to be integers.\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{p,10460,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{p,10525,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{p,10530,"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]={{v,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if (!IsValidIntegerType(AlignOp->getType())) {\n    S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{v,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n    return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{p,12117,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // The operands need to be integers.\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{p,12139,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{p,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{p,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_expect_scalar_operand"]={
["err_typecheck_expect_scalar_operand"]={
Line 6,763: Line 6,763:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{eb,2637,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // Require the operand to be a scalar, a vector, or a matrix.\n  if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{v,275,"/// 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]={{eb,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // Require the operand to be a scalar, a vector, or a matrix.\n  if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{v,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n    S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}}
},
},
["err_typecheck_expression_not_modifiable_lvalue"]={
["err_typecheck_expression_not_modifiable_lvalue"]={
Line 6,775: Line 6,775:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12367,"/// 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]={{p,14363,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_ClassTemporary:\n    DiagID = diag::err_typecheck_expression_not_modifiable_lvalue;"}}
},
},
["err_typecheck_field_variable_size"]={
["err_typecheck_field_variable_size"]={
Line 6,787: Line 6,787:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,15887,"/// 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]={{t,18160,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n  // than a variably modified type.\n  if (!InvalidDecl && T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}}
},
},
["err_typecheck_illegal_increment_decrement"]={
["err_typecheck_illegal_increment_decrement"]={
Line 6,799: Line 6,799:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12700,"/// 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]={{p,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n  } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n  } else if (ResType->isRealType()) {\n  } else if (ResType->isPointerType()) {\n  } else if (ResType->isObjCObjectPointerType()) {\n  } else if (ResType->isAnyComplexType()) {\n  } else if (ResType->isPlaceholderType()) {\n  } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n  } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n  } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n  } else {\n    S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}}
},
},
["err_typecheck_incompatible_address_space"]={
["err_typecheck_incompatible_address_space"]={
Line 6,811: Line 6,811:
[j]=o,
[j]=o,
[c]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of "},
[c]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of "},
[k]={{eb,2295,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n  // Converting the top level pointee addrspace is permitted for compatible\n  // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n  // if any of the nested pointee addrspaces differ, we emit a warning\n  // regardless of addrspace compatibility. This makes\n  //  local int ** p;\n  //  return (generic int **) p;\n  // warn even though local -> generic is permitted.\n  if (Self.getLangOpts().OpenCL) {\n    unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{p,15281,"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]={{eb,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n  // Converting the top level pointee addrspace is permitted for compatible\n  // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n  // if any of the nested pointee addrspaces differ, we emit a warning\n  // regardless of addrspace compatibility. This makes\n  //  local int ** p;\n  //  return (generic int **) p;\n  // warn even though local -> generic is permitted.\n  if (Self.getLangOpts().OpenCL) {\n    unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{p,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerDiscardsQualifiers: {\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n      DiagKind = diag::err_typecheck_incompatible_address_space;"}}
},
},
["err_typecheck_incompatible_nested_address_space"]={
["err_typecheck_incompatible_nested_address_space"]={
Line 6,823: Line 6,823:
[j]=o,
[j]=o,
[c]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter."},
[c]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter."},
[k]={{p,15321,"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]={{p,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleNestedPointerAddressSpaceMismatch:\n    DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}}
},
},
["err_typecheck_incompatible_ownership"]={
["err_typecheck_incompatible_ownership"]={
Line 6,835: Line 6,835:
[j]=o,
[j]=o,
[c]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[c]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[k]={{eb,2763,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ARC imposes extra restrictions on casts.\n  if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n      if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n        if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n          Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{p,15285,"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]={{eb,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ARC imposes extra restrictions on casts.\n  if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n      if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n        if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n          Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{p,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatiblePointerDiscardsQualifiers: {\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n    } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n      DiagKind = diag::err_typecheck_incompatible_ownership;"}}
},
},
["err_typecheck_incomplete_array_needs_initializer"]={
["err_typecheck_incomplete_array_needs_initializer"]={
Line 6,847: Line 6,847:
[j]=o,
[j]=o,
[c]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"},
[c]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401"},
[k]={{t,12077,"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]={{t,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n      if (Var->isConstexpr())\n      else\n        Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}}
},
},
["err_typecheck_incomplete_tag"]={
["err_typecheck_incomplete_tag"]={
Line 6,859: Line 6,859:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{I,564,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{I,582,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (SS.isSet()) {\n    if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n      SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{I,1117,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{ab,12853,"/// 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]={{I,655,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{I,675,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  if (SS.isSet()) {\n    if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n      SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{I,1361,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{ab,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}}
},
},
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
Line 6,871: Line 6,871:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12371,"/// 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]={{p,14365,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_IncompleteVoidType:\n    return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}}
},
},
["err_typecheck_indirection_requires_pointer"]={
["err_typecheck_indirection_requires_pointer"]={
Line 6,883: Line 6,883:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,13062,"/// 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]={{p,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  if (Result.isNull()) {\n    S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}}
},
},
["err_typecheck_indirection_through_void_pointer_cpp"]={
["err_typecheck_indirection_through_void_pointer_cpp"]={
Line 6,895: Line 6,895:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{p,13072,"/// 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]={{p,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  if (Result->isVoidType()) {\n    if (LO.CPlusPlus)\n      S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}}
},
},
["err_typecheck_invalid_lvalue_addrof"]={
["err_typecheck_invalid_lvalue_addrof"]={
Line 6,907: Line 6,907:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12929,"/// 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]={{p,15031,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  } else if (lval == Expr::LV_MemberFunction) {\n  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n    // C99 6.5.3.2p1\n    // The operand must be either an l-value or a function designator\n    if (!op->getType()->isFunctionType()) {\n      // Use a special diagnostic for loads from property references.\n      if (isa<PseudoObjectExpr>(op)) {\n      } else {\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}}
},
},
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
Line 6,919: Line 6,919:
[j]=o,
[j]=o,
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"},
[k]={{p,12808,"/// 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]={{p,14869,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    if (PTy->getKind() == BuiltinType::Overload) {\n      if (!isa<OverloadExpr>(E)) {\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}}
},
},
["err_typecheck_invalid_operands"]={
["err_typecheck_invalid_operands"]={
Line 6,931: Line 6,931:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,9208,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,9685,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  unsigned DiagID = diag::err_typecheck_invalid_operands;"},{p,10449,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // Do not allow shifts for boolean vectors.\n  if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{p,10520,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{p,10535,"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]={{p,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  unsigned DiagID = diag::err_typecheck_invalid_operands;"},{p,12111,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // Do not allow shifts for boolean vectors.\n  if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{p,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{p,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_invalid_restrict_invalid_pointee"]={
["err_typecheck_invalid_restrict_invalid_pointee"]={
Line 6,943: Line 6,943:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{F,1724,"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]={{F,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n    if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n      // If we have a pointer or reference, the pointee must have an object\n      // incomplete type.\n      if (!EltTy->isIncompleteOrObjectType()) {\n        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}}
},
},
["err_typecheck_invalid_restrict_not_pointer"]={
["err_typecheck_invalid_restrict_not_pointer"]={
Line 6,955: Line 6,955:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{F,1731,"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]={{F,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n    if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n    } else if (!isDependentOrGNUAutoType(T)) {\n      DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}}
},
},
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
Line 6,967: Line 6,967:
[j]=o,
[j]=o,
[c]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a..."},
[c]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a..."},
[k]={{t,4558,"/// 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]={{t,5109,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n    // or incomplete types shall not be restrict-qualified.\"\n    if (TypeQuals & DeclSpec::TQ_restrict)\n      Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}}
},
},
["err_typecheck_ivar_variable_size"]={
["err_typecheck_ivar_variable_size"]={
Line 6,979: Line 6,979:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,16099,"/// 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]={{t,18386,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  }\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n  // than a variably modified type.\n  else if (T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}}
},
},
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
Line 6,991: Line 6,991:
[j]=o,
[j]=o,
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[k]={{p,9235,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (!(LHSNatVec && RHSNatVec)) {\n    Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{p,9239,"// 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]={{p,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  if (!(LHSNatVec && RHSNatVec)) {\n    Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{p,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_lvalue_casts_not_supported"]={
["err_typecheck_lvalue_casts_not_supported"]={
Line 7,003: Line 7,003:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12360,"/// 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]={{p,14358,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_LValueCast:\n    DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}}
},
},
["err_typecheck_member_reference_arrow"]={
["err_typecheck_member_reference_arrow"]={
Line 7,015: Line 7,015:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{E,6599,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{I,1061,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n    } else if (BaseType->isFunctionType()) {\n    } else {\n      S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{ab,12884,"/// 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]={{E,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{I,1293,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n    } else if (BaseType->isFunctionType()) {\n    } else {\n      S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{ab,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  case OR_No_Viable_Function: {\n    if (CandidateSet.empty()) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}}
},
},
["err_typecheck_member_reference_ivar"]={
["err_typecheck_member_reference_ivar"]={
Line 7,027: Line 7,027:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{I,1150,"/// 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]={{I,1404,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      } else {\n        S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}}
},
},
["err_typecheck_member_reference_ivar_suggest"]={
["err_typecheck_member_reference_ivar_suggest"]={
Line 7,039: Line 7,039:
[j]=o,
[j]=o,
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"},
[k]={{I,1129,"/// 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]={{I,1378,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!IV) {\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n        S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}}
},
},
["err_typecheck_member_reference_struct_union"]={
["err_typecheck_member_reference_struct_union"]={
Line 7,051: Line 7,051:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{I,447,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // Even in dependent contexts, try to diagnose base expressions with\n  // obviously wrong types, e.g.:\n  //\n  // T* t;\n  // t.f;\n  //\n  // In Obj-C++, however, the above expression is valid, since it could be\n  // accessing the \'f\' property if T is an Obj-C interface. The extra check\n  // allows this, while still reporting an error if T is a struct pointer.\n  if (!IsArrow) {\n    if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{I,1386,"fail:\n  S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}}
[k]={{I,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // Even in dependent contexts, try to diagnose base expressions with\n  // obviously wrong types, e.g.:\n  //\n  // T* t;\n  // t.f;\n  //\n  // In Obj-C++, however, the above expression is valid, since it could be\n  // accessing the \'f\' property if T is an Obj-C interface. The extra check\n  // allows this, while still reporting an error if T is a struct pointer.\n  if (!IsArrow) {\n    if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n      Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{I,1691,"fail:\n  S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}}
},
},
["err_typecheck_member_reference_suggestion"]={
["err_typecheck_member_reference_suggestion"]={
Line 7,063: Line 7,063:
[j]=o,
[j]=o,
[c]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records."},
[c]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records."},
[k]={{E,6595,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          if (FirstIteration) {\n            Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{E,6699,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n  // C++ [expr.pseudo]p2:\n  //  The left-hand side of the dot operator shall be of scalar type. The\n  //  left-hand side of the arrow operator shall be of pointer to scalar type.\n  //  This scalar type is the object type.\n  // Note that this is rather different from the normal handling for the\n  // arrow operator.\n  if (OpKind == tok::arrow) {\n    if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n    } else if (!Base->isTypeDependent()) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{E,6753,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n  //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n          auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{I,1055,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n      // Recover from arrow accesses to records, e.g.:\n      //  struct MyRecord foo;\n      //  foo->bar\n      // This is actually well-formed in C++ if MyRecord has an\n      // overloaded operator->, but that should have been dealt with\n      // by now--or a diagnostic message already issued if a problem\n      // was encountered while looking for the overloaded operator->.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{I,1365,"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]={{E,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          if (FirstIteration) {\n            Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{E,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n  // C++ [expr.pseudo]p2:\n  //  The left-hand side of the dot operator shall be of scalar type. The\n  //  left-hand side of the arrow operator shall be of pointer to scalar type.\n  //  This scalar type is the object type.\n  // Note that this is rather different from the normal handling for the\n  // arrow operator.\n  if (OpKind == tok::arrow) {\n    if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n    } else if (!Base->isTypeDependent()) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{E,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n  //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n          auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{I,1285,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    else if (BaseType->isRecordType()) {\n      // Recover from arrow accesses to records, e.g.:\n      //  struct MyRecord foo;\n      //  foo->bar\n      // This is actually well-formed in C++ if MyRecord has an\n      // overloaded operator->, but that should have been dealt with\n      // by now--or a diagnostic message already issued if a problem\n      // was encountered while looking for the overloaded operator->.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{I,1664,"fail:\n  // Recover from dot accesses to pointers, e.g.:\n  //  type *foo;\n  //  foo.bar\n  // This is actually well-formed in two cases:\n  //  - \'type\' is an Objective C type\n  //  - \'bar\' is a pseudo-destructor name which happens to refer to\n  //    the appropriate pointer type\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}}
},
},
["err_typecheck_member_reference_type"]={
["err_typecheck_member_reference_type"]={
Line 7,075: Line 7,075:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{I,957,"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]={{I,1176,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n    Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}}
},
},
["err_typecheck_member_reference_unknown"]={
["err_typecheck_member_reference_unknown"]={
Line 7,087: Line 7,087:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{I,959,"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]={{I,1179,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n  else\n    Diag(MemberLoc, diag::err_typecheck_member_reference_unknown) << MemberName << BaseType << int(IsArrow);"}}
},
},
["err_typecheck_missing_return_type_incompatible"]={
["err_typecheck_missing_return_type_incompatible"]={
Line 7,099: Line 7,099:
[j]=o,
[j]=o,
[c]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is "},
[c]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is "},
[k]={{yb,618,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n  // We require the return types to strictly match here.\n  // Note that we\'ve already done the required promotions as part of\n  // processing the return statement.\n  for (const ReturnStmt *RS : CSI.Returns) {\n    Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{K,3323,"/// 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]={{yb,704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n  // We require the return types to strictly match here.\n  // Note that we\'ve already done the required promotions as part of\n  // processing the return statement.\n  for (const ReturnStmt *RS : CSI.Returns) {\n    Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{K,3860,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  {\n    case TDK_Inconsistent: {\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n        Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}}
},
},
["err_typecheck_negative_array_size"]={
["err_typecheck_negative_array_size"]={
Line 7,111: Line 7,111:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,5867,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n  if (SizeIsNegative)\n    Diag(Loc, diag::err_typecheck_negative_array_size);"},{t,5968,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n  if (T->isVariablyModifiedType()) {\n    if (S->getFnParent() == nullptr) {\n      if (FixedTInfo) {\n      } else {\n        if (SizeIsNegative)\n          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{E,1895,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // We\'ve already performed any required implicit conversion to integer or\n    // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (Value->isSigned() && Value->isNegative()) {\n        return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{F,2333,"/// 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]={{t,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n  if (SizeIsNegative)\n    Diag(Loc, diag::err_typecheck_negative_array_size);"},{t,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n  if (T->isVariablyModifiedType()) {\n    if (S->getFnParent() == nullptr) {\n      if (FixedTInfo) {\n      } else {\n        if (SizeIsNegative)\n          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{E,2221,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // We\'ve already performed any required implicit conversion to integer or\n    // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (Value->isSigned() && Value->isNegative()) {\n        return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{F,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n      // have a value greater than zero.\n      // In C++, this follows from narrowing conversions being disallowed.\n      if (ConstVal.isSigned() && ConstVal.isNegative()) {\n        if (Entity)\n        else\n          Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}}
},
},
["err_typecheck_non_object_not_modifiable_lvalue"]={
["err_typecheck_non_object_not_modifiable_lvalue"]={
Line 7,123: Line 7,123:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,12356,"/// 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]={{p,14351,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  case Expr::MLV_NotObjectType:\n    DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}}
},
},
["err_typecheck_nonviable_condition"]={
["err_typecheck_nonviable_condition"]={
Line 7,135: Line 7,135:
[j]=o,
[j]=o,
[c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "},
[c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of "},
[k]={{D,8179,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n        S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{ab,3223,"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]={{D,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n        S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{ab,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n      Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}}
},
},
["err_typecheck_nonviable_condition_incomplete"]={
["err_typecheck_nonviable_condition_incomplete"]={
Line 7,147: Line 7,147:
[j]=o,
[j]=o,
[c]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i..."},
[c]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i..."},
[k]={{D,8178,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{ab,3222,"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]={{D,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_UserConversionOverloadFailed:\n    case OR_No_Viable_Function: {\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{ab,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  if (OvResult == OR_Ambiguous)\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}}
},
},
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
Line 7,159: Line 7,159:
[j]=o,
[j]=o,
[c]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."},
[c]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0."},
[k]={{p,7500,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n  // spaces is disallowed.\n  if (lhQual.isAddressSpaceSupersetOf(rhQual))\n  else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n  else {\n    S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,9987,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  // if both are pointers check if operation is valid wrt address spaces\n  if (isLHSPointer && isRHSPointer) {\n    if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n      S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{p,11316,"// 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]={{p,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n  // spaces is disallowed.\n  if (lhQual.isAddressSpaceSupersetOf(rhQual))\n  else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n  else {\n    S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  // if both are pointers check if operation is valid wrt address spaces\n  if (isLHSPointer && isRHSPointer) {\n    if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n      S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{p,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n  } else if (getLangOpts().CPlusPlus) {\n  } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n    if (LCanPointeeTy != RCanPointeeTy) {\n      // Treat NULL constant as a special case in OpenCL.\n      if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n        if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n          Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}}
},
},
["err_typecheck_ordered_comparison_of_function_pointers"]={
["err_typecheck_ordered_comparison_of_function_pointers"]={
Line 7,171: Line 7,171:
[j]=o,
[j]=o,
[c]={pb,1615397021,ub},
[c]={pb,1615397021,ub},
[k]={{p,11245,"// 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]={{p,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n    auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}}
},
},
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
Line 7,183: Line 7,183:
[j]=o,
[j]=o,
[c]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."},
[c]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules."},
[k]={{p,11492,"// 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]={{p,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    if (LangOpts.DebuggerSupport) {\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n      if (IsOrdered) {\n        DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}}
},
},
["err_typecheck_pointer_arith_function_type"]={
["err_typecheck_pointer_arith_function_type"]={
Line 7,195: Line 7,195:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,9905,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{p,9914,"/// 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]={{p,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{p,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}}
},
},
["err_typecheck_pointer_arith_void_type"]={
["err_typecheck_pointer_arith_void_type"]={
Line 7,207: Line 7,207:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,9870,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{p,9873,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}}
[k]={{p,11431,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{p,11441,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}}
},
},
["err_typecheck_sclass_fscope"]={
["err_typecheck_sclass_fscope"]={
Line 7,219: Line 7,219:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,6680,"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]={{t,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!DC->isRecord() && S->getFnParent() == nullptr) {\n    // C99 6.9p2: The storage-class specifiers auto and register shall not\n    // appear in the declaration specifiers in an external declaration.\n    // Global Register+Asm is a GNU extension we support.\n    if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n      Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}}
},
},
["err_typecheck_sclass_func"]={
["err_typecheck_sclass_func"]={
Line 7,231: Line 7,231:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{t,8015,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_mutable:\n    SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}}
[k]={{t,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  case DeclSpec::SCS_mutable:\n    SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}}
},
},
["err_typecheck_statement_requires_integer"]={
["err_typecheck_statement_requires_integer"]={
Line 7,243: Line 7,243:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{K,894,"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]={{K,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}}
},
},
["err_typecheck_statement_requires_scalar"]={
["err_typecheck_statement_requires_scalar"]={
Line 7,255: Line 7,255:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,18194,"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]={{p,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n  if (!E->isTypeDependent()) {\n    if (!T->isScalarType()) { // C99 6.8.4.1p1\n      Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}}
},
},
["err_typecheck_sub_ptr_compatible"]={
["err_typecheck_sub_ptr_compatible"]={
Line 7,267: Line 7,267:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{v,8465,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // Ensure Pointee types are compatible\n    if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n      if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{p,10099,"/// 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]={{v,9078,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // Ensure Pointee types are compatible\n    if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n      if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{p,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}}
},
},
["err_typecheck_subscript_not_integer"]={
["err_typecheck_subscript_not_integer"]={
Line 7,279: Line 7,279:
[j]=o,
[j]=o,
[c]={"003af249275a",1240699855,"minor diagnostics improvements."},
[c]={"003af249275a",1240699855,"minor diagnostics improvements."},
[k]={{p,5179,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1\n  if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{p,14418,"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]={{p,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // C99 6.5.2.1p1\n  if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{p,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  for (const OffsetOfComponent &OC : Components) {\n    if (OC.isBrackets) {\n      // The expression must be an integral expression.\n      // FIXME: An integral constant expression?\n      if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n        return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}}
},
},
["err_typecheck_subscript_value"]={
["err_typecheck_subscript_value"]={
Line 7,291: Line 7,291:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,5175,"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]={{p,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n  } else if (LHSTy->isArrayType()) {\n  } else if (RHSTy->isArrayType()) {\n  } else {\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}
},
},
["err_typecheck_sve_rvv_ambiguous"]={
["err_typecheck_sve_rvv_ambiguous"]={
Line 7,303: Line 7,303:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{p,9545,"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]={{p,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}}
},
},
["err_typecheck_sve_rvv_gnu_ambiguous"]={
["err_typecheck_sve_rvv_gnu_ambiguous"]={
Line 7,315: Line 7,315:
[j]=o,
[j]=o,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{p,9581,"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]={{p,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}}
},
},
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
Line 7,327: Line 7,327:
[j]=o,
[j]=o,
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{p,11227,"// 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]={{p,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  auto computeResultTy = [&]() {\n    if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n      Diag(Loc, diag::err_typecheck_three_way_comparison_of_pointer_and_zero) << (LHSIsNull ? LHS.get()->getSourceRange() : RHS.get()->getSourceRange());"}}
},
},
["err_typecheck_unary_expr"]={
["err_typecheck_unary_expr"]={
Line 7,339: Line 7,339:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{p,14014,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  if (getLangOpts().OpenCL) {\n    // The only legal unary operation for atomics is \'&\'.\n    if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{p,14075,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Minus:\n    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14095,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n      if (!T->isIntegerType())\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14097,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14116,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    // WebAsembly tables can\'t be used in unary expressions.\n    if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14131,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n      // C99 6.5.3.3p1: ok, fallthrough;\n      if (Context.getLangOpts().CPlusPlus) {\n      } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n        // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n        // operate on scalar float types.\n        if (!resultType->isIntegerType() && !resultType->isPointerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14139,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n      if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n        if (!T->isIntegerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14147,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n      if (VTy->getVectorKind() != VectorType::GenericVector)\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,14153,"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]={{p,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  if (getLangOpts().OpenCL) {\n    // The only legal unary operation for atomics is \'&\'.\n    if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{p,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Minus:\n    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n      if (!T->isIntegerType())\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_Not: // bitwise complement\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    else if (resultType->hasIntegerRepresentation())\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    // WebAsembly tables can\'t be used in unary expressions.\n    if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n      // C99 6.5.3.3p1: ok, fallthrough;\n      if (Context.getLangOpts().CPlusPlus) {\n      } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n        // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n        // operate on scalar float types.\n        if (!resultType->isIntegerType() && !resultType->isPointerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n      if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n        if (!T->isIntegerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n      if (VTy->getVectorKind() != VectorType::GenericVector)\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{p,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  case UO_LNot: // logical negation\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    } else if (resultType->isExtVectorType()) {\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}}
},
},
["err_typecheck_vector_lengths_not_equal"]={
["err_typecheck_vector_lengths_not_equal"]={
Line 7,351: Line 7,351:
[j]=o,
[j]=o,
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands"},
[k]={{p,9709,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n    Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,10480,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSVecTy) {\n  } else if (RHSVecTy) {\n    // OpenCL v1.1 s6.3.j says that for vector types, the operators\n    // are applied component-wise. So if RHS is a vector, then ensure\n    // that the number of elements is the same as LHS...\n    if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,10553,"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]={{p,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n    Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,12149,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSVecTy) {\n  } else if (RHSVecTy) {\n    // OpenCL v1.1 s6.3.j says that for vector types, the operators\n    // are applied component-wise. So if RHS is a vector, then ensure\n    // that the number of elements is the same as LHS...\n    if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  if (!LHSType->isVLSTBuiltinType()) {\n  } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n    if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_vector_not_convertable"]={
["err_typecheck_vector_not_convertable"]={
Line 7,363: Line 7,363:
[j]=o,
[j]=o,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{p,9587,"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]={{p,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}}
},
},
["err_typecheck_vector_not_convertable_implict_truncation"]={
["err_typecheck_vector_not_convertable_implict_truncation"]={
Line 7,375: Line 7,375:
[j]=o,
[j]=o,
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions"},
[k]={{p,9659,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there is a vector type that is not a ExtVector and a scalar, we reach\n  // this point if scalar could not be converted to the vector\'s element type\n  // without truncation.\n  if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{p,9718,"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]={{p,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there is a vector type that is not a ExtVector and a scalar, we reach\n  // this point if scalar could not be converted to the vector\'s element type\n  // without truncation.\n  if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{p,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}}
},
},
["err_typecheck_vector_not_convertable_non_scalar"]={
["err_typecheck_vector_not_convertable_non_scalar"]={
Line 7,387: Line 7,387:
[j]=o,
[j]=o,
[c]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"},
[c]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types"},
[k]={{p,9639,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there\'s a non-vector, non-real operand, diagnose that.\n  if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,9704,"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]={{p,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // If there\'s a non-vector, non-real operand, diagnose that.\n  if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{p,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_wasm_table_must_have_zero_length"]={
["err_typecheck_wasm_table_must_have_zero_length"]={
Line 7,399: Line 7,399:
[j]=a,
[j]=a,
[c]={M,1625925174,L},
[c]={M,1625925174,L},
[k]={{t,7654,"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]={{t,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // WebAssembly tables must be static with a zero length and can\'t be\n  // declared within functions.\n  if (T->isWebAssemblyTableType()) {\n    if (!ATy || ATy->getSize().getSExtValue() != 0) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}}
},
},
["err_typecheck_zero_array_size"]={
["err_typecheck_zero_array_size"]={
Line 7,411: Line 7,411:
[j]=o,
[j]=o,
[c]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,"},
[c]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,"},
[k]={{"clang/lib/Sema/SemaSYCL.cpp",49,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    if (isZeroSizedArray(*this, TypeToCheck)) {\n      SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{F,2339,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n        Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}}
[k]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    if (isZeroSizedArray(*this, TypeToCheck)) {\n      SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{F,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  if (!ArraySize) {\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  } else {\n    if (!R.isUsable()) {\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    } else {\n      if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n        Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}}
},
},
["err_typedef_changes_linkage"]={
["err_typedef_changes_linkage"]={
Line 7,423: Line 7,423:
[j]=o,
[j]=o,
[c]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change"},
[c]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change"},
[k]={{t,4479,"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]={{t,5015,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n        DiagID = diag::err_typedef_changes_linkage;"}}
},
},
["err_typedef_not_bitfield"]={
["err_typedef_not_bitfield"]={
Line 7,435: Line 7,435:
[j]=o,
[j]=o,
[c]={r,1237025389,s},
[c]={r,1237025389,s},
[k]={{y,3088,"/// 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]={{y,3630,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  if (isInstField) {\n  } else {\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n      } else if (isa<TypedefDecl>(Member)) {\n        Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}}
},
},
["err_typedef_not_identifier"]={
["err_typedef_not_identifier"]={
Line 7,447: Line 7,447:
[j]=o,
[j]=o,
[c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"},
[c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462"},
[k]={{t,5930,"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]={{t,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n    else\n      Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}}
},
},
["err_typename_identifiers_only"]={
["err_typename_identifiers_only"]={
Line 7,459: Line 7,459:
[j]=u,
[j]=u,
[c]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,"},
[c]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,"},
[k]={{bb,731,"/// 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]={{bb,830,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  while (true) {\n    if (InvalidDeclarator)\n    else {\n      // \"typename\" keyword is allowed for identifiers only,\n      // because it may be a type definition.\n      if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n        Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}}
},
},
["err_typename_invalid_constexpr"]={
["err_typename_invalid_constexpr"]={
Line 7,471: Line 7,471:
[j]=u,
[j]=u,
[c]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"},
[c]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be"},
[k]={{R,2439,"/// 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]={{R,2688,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove constexpr specifier if present.\n  if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}}
},
},
["err_typename_invalid_functionspec"]={
["err_typename_invalid_functionspec"]={
Line 7,483: Line 7,483:
[j]=u,
[j]=u,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{R,2427,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isInlineSpecified())\n      Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{R,2429,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isVirtualSpecified())\n      Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{R,2431,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.hasExplicitSpecifier())\n      Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{R,2433,"/// 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]={{R,2676,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isInlineSpecified())\n      Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{R,2678,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isVirtualSpecified())\n      Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{R,2680,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.hasExplicitSpecifier())\n      Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{R,2682,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isNoreturnSpecified())\n      Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}}
},
},
["err_typename_invalid_storageclass"]={
["err_typename_invalid_storageclass"]={
Line 7,495: Line 7,495:
[j]=u,
[j]=u,
[c]={A,1236199783,z},
[c]={A,1236199783,z},
[k]={{R,2418,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n      Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{R,2420,"/// 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]={{R,2666,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n      Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{R,2669,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n    else\n      Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}}
},
},
["err_typename_missing"]={
["err_typename_missing"]={
Line 7,507: Line 7,507:
[j]=o,
[j]=o,
[c]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an"},
[c]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an"},
[k]={{t,723,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n  else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n  } else if (isDependentScopeSpecifier(*SS)) {\n    unsigned DiagID = diag::err_typename_missing;"},{p,2456,"/// 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]={{t,819,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n  else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n  } else if (isDependentScopeSpecifier(*SS)) {\n    unsigned DiagID = diag::err_typename_missing;"},{p,2878,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n    unsigned DiagID = diag::err_typename_missing;"}}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu