ResultChar = 8;
break;
case 'e':
- PP.Diag(Loc, diag::ext_nonstandard_escape, "e");
+ PP.Diag(Loc, diag::ext_nonstandard_escape) << "e";
ResultChar = 27;
break;
case 'f':
case '(': case '{': case '[': case '%':
// GCC accepts these as extensions. We warn about them as such though.
if (!PP.getLangOptions().NoExtensions) {
- PP.Diag(Loc, diag::ext_nonstandard_escape,
- std::string()+(char)ResultChar);
+ PP.Diag(Loc, diag::ext_nonstandard_escape)
+ << std::string()+(char)ResultChar;
break;
}
// FALL THROUGH.
default:
if (isgraph(ThisTokBuf[0])) {
- PP.Diag(Loc, diag::ext_unknown_escape, std::string()+(char)ResultChar);
+ PP.Diag(Loc, diag::ext_unknown_escape) << std::string()+(char)ResultChar;
} else {
- PP.Diag(Loc, diag::ext_unknown_escape, "x"+llvm::utohexstr(ResultChar));
+ PP.Diag(Loc, diag::ext_unknown_escape) << "x"+llvm::utohexstr(ResultChar);
}
break;
}
}
void NumericLiteralParser::Diag(SourceLocation Loc, unsigned DiagID,
- const std::string &M) {
- PP.Diag(Loc, DiagID, M);
+ const std::string &M) {
+ PP.Diag(Loc, DiagID) << M;
hadError = true;
}
if (LParenLoc.isValid()) {
if (PeekTok.isNot(tok::r_paren)) {
PP.Diag(PeekTok.getLocation(), diag::err_pp_missing_rparen);
- PP.Diag(LParenLoc, diag::err_matching, "(");
+ PP.Diag(LParenLoc, diag::err_matching) << "(";
return true;
}
// Consume the ).
return true;
if (PeekTok.isNot(tok::r_paren)) {
- PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_rparen,
- Result.getRange());
- PP.Diag(Start, diag::err_matching, "(");
+ PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_rparen)
+ << Result.getRange();
+ PP.Diag(Start, diag::err_matching) << "(";
return true;
}
DT.State = DefinedTracker::Unknown;
// If this operator is live and overflowed, report the issue.
if (Overflow && ValueLive)
- PP.Diag(Loc, diag::warn_pp_expr_overflow, Result.getRange());
+ PP.Diag(Loc, diag::warn_pp_expr_overflow) << Result.getRange();
DT.State = DefinedTracker::Unknown;
return false;
unsigned PeekPrec = getPrecedence(PeekTok.getKind());
// If this token isn't valid, report the error.
if (PeekPrec == ~0U) {
- PP.Diag(PeekTok.getLocation(), diag::err_pp_expr_bad_token_binop,
- LHS.getRange());
+ PP.Diag(PeekTok.getLocation(), diag::err_pp_expr_bad_token_binop)
+ << LHS.getRange();
return true;
}
// If this token isn't valid, report the error.
if (PeekPrec == ~0U) {
- PP.Diag(PeekTok.getLocation(), diag::err_pp_expr_bad_token_binop,
- RHS.getRange());
+ PP.Diag(PeekTok.getLocation(), diag::err_pp_expr_bad_token_binop)
+ << RHS.getRange();
return true;
}
// value was negative, warn about it.
if (ValueLive && Res.isUnsigned()) {
if (!LHS.isUnsigned() && LHS.Val.isNegative())
- PP.Diag(OpLoc, diag::warn_pp_convert_lhs_to_positive,
- LHS.Val.toString(10, true) + " to " +
- LHS.Val.toString(10, false),
- LHS.getRange(), RHS.getRange());
+ PP.Diag(OpLoc, diag::warn_pp_convert_lhs_to_positive)
+ << LHS.Val.toString(10, true) + " to " +
+ LHS.Val.toString(10, false)
+ << LHS.getRange() << RHS.getRange();
if (!RHS.isUnsigned() && RHS.Val.isNegative())
- PP.Diag(OpLoc, diag::warn_pp_convert_rhs_to_positive,
- RHS.Val.toString(10, true) + " to " +
- RHS.Val.toString(10, false),
- LHS.getRange(), RHS.getRange());
+ PP.Diag(OpLoc, diag::warn_pp_convert_rhs_to_positive)
+ << RHS.Val.toString(10, true) + " to " +
+ RHS.Val.toString(10, false)
+ << LHS.getRange() << RHS.getRange();
}
LHS.Val.setIsUnsigned(Res.isUnsigned());
RHS.Val.setIsUnsigned(Res.isUnsigned());
if (RHS.Val != 0)
Res = LHS.Val % RHS.Val;
else if (ValueLive) {
- PP.Diag(OpLoc, diag::err_pp_remainder_by_zero, LHS.getRange(),
- RHS.getRange());
+ PP.Diag(OpLoc, diag::err_pp_remainder_by_zero)
+ << LHS.getRange() << RHS.getRange();
return true;
}
break;
if (LHS.Val.isSigned()) // MININT/-1 --> overflow.
Overflow = LHS.Val.isMinSignedValue() && RHS.Val.isAllOnesValue();
} else if (ValueLive) {
- PP.Diag(OpLoc, diag::err_pp_division_by_zero, LHS.getRange(),
- RHS.getRange());
+ PP.Diag(OpLoc, diag::err_pp_division_by_zero)
+ << LHS.getRange() << RHS.getRange();
return true;
}
break;
// Comma is invalid in pp expressions in c89/c++ mode, but is valid in C99
// if not being evaluated.
if (!PP.getLangOptions().C99 || ValueLive)
- PP.Diag(OpLoc, diag::ext_pp_comma_expr, LHS.getRange(), RHS.getRange());
+ PP.Diag(OpLoc, diag::ext_pp_comma_expr)
+ << LHS.getRange() << RHS.getRange();
Res = RHS.Val; // LHS = LHS,RHS -> RHS.
break;
case tok::question: {
// Parse the : part of the expression.
if (PeekTok.isNot(tok::colon)) {
- PP.Diag(PeekTok.getLocation(), diag::err_expected_colon,
- LHS.getRange(), RHS.getRange());
- PP.Diag(OpLoc, diag::err_matching, "?");
+ PP.Diag(PeekTok.getLocation(), diag::err_expected_colon)
+ << LHS.getRange(), RHS.getRange();
+ PP.Diag(OpLoc, diag::err_matching) << "?";
return true;
}
// Consume the :.
}
case tok::colon:
// Don't allow :'s to float around without being part of ?: exprs.
- PP.Diag(OpLoc, diag::err_pp_colon_without_question, LHS.getRange(),
- RHS.getRange());
+ PP.Diag(OpLoc, diag::err_pp_colon_without_question)
+ << LHS.getRange() << RHS.getRange();
return true;
}
// If this operator is live and overflowed, report the issue.
if (Overflow && ValueLive)
- PP.Diag(OpLoc, diag::warn_pp_expr_overflow,
- LHS.getRange(), RHS.getRange());
+ PP.Diag(OpLoc, diag::warn_pp_expr_overflow)
+ << LHS.getRange() << RHS.getRange();
// Put the result back into 'LHS' for our next iteration.
LHS.Val = Res;
return Diags.Report(getFullLoc(Tok.getLocation()), DiagID);
}
-
-void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
- const std::string &Msg) {
- Diags.Report(getFullLoc(Loc), DiagID) << Msg;
-}
-
-void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
- const std::string &Msg,
- const SourceRange &R1, const SourceRange &R2) {
- Diags.Report(getFullLoc(Loc), DiagID) << Msg << R1 << R2;
-}
-
-
-void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
- const SourceRange &R) {
- Diags.Report(getFullLoc(Loc), DiagID) << R;
-}
-
-void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
- const SourceRange &R1, const SourceRange &R2) {
- Diags.Report(getFullLoc(Loc), DiagID) << R1 << R2;
-}
-
-
void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
llvm::cerr << tok::getTokenName(Tok.getKind()) << " '"
<< getSpelling(Tok) << "'";