forked from OSchip/llvm-project
Teach BugReporter to "escape" the occurance of '%' characters in diagnostic messages when emitted results to the standard Diagnostics output. Fixes PR 6033.
llvm-svn: 93507
This commit is contained in:
parent
959990b840
commit
d74cc397c8
|
@ -1818,8 +1818,23 @@ void BugReporter::FlushReport(BugReportEquivClass& EQ) {
|
|||
R->getRanges(Beg, End);
|
||||
Diagnostic& Diag = getDiagnostic();
|
||||
FullSourceLoc L(R->getLocation(), getSourceManager());
|
||||
unsigned ErrorDiag = Diag.getCustomDiagID(Diagnostic::Warning,
|
||||
R->getShortDescription());
|
||||
|
||||
// Search the description for '%', as that will be interpretted as a
|
||||
// format character by FormatDiagnostics.
|
||||
llvm::StringRef desc = R->getShortDescription();
|
||||
unsigned ErrorDiag;
|
||||
{
|
||||
llvm::SmallString<512> TmpStr;
|
||||
llvm::raw_svector_ostream Out(TmpStr);
|
||||
for (llvm::StringRef::iterator I=desc.begin(), E=desc.end(); I!=E; ++I)
|
||||
if (*I == '%')
|
||||
Out << "%%";
|
||||
else
|
||||
Out << *I;
|
||||
|
||||
Out.flush();
|
||||
ErrorDiag = Diag.getCustomDiagID(Diagnostic::Warning, TmpStr);
|
||||
}
|
||||
|
||||
switch (End-Beg) {
|
||||
default: assert(0 && "Don't handle this many ranges yet!");
|
||||
|
|
|
@ -801,3 +801,13 @@ void test_bad_msg(TestBadArg *p) {
|
|||
[p testBadArg:y]; // expected-warning{{Pass-by-value argument in message expression is undefined}}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// PR 6033 - Test emitting the correct output in a warning where we use '%'
|
||||
// with operands that are undefined.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
int pr6033(int x) {
|
||||
int y;
|
||||
return x % y; // expected-warning{{The right operand of '%' is a garbage value}}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue