diff options
author | Tobias Grosser <tobias@grosser.es> | 2014-05-01 14:06:01 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2014-05-01 14:06:01 +0000 |
commit | 86a85678f2a793dd2e82025f3af25ba45d6bbec1 (patch) | |
tree | c60dd9329203815ddef4aaf0326ad1dacede14b7 | |
parent | 10961c0eab6bf294818470708625a5d4e786a015 (diff) | |
download | bcm5719-llvm-86a85678f2a793dd2e82025f3af25ba45d6bbec1.tar.gz bcm5719-llvm-86a85678f2a793dd2e82025f3af25ba45d6bbec1.zip |
Support 'remark' in VerifyDiagnosticConsumer
After Diego added support for -Rpass=inliner we have now in-tree remarks which
we can use to properly test this feature.
llvm-svn: 207765
-rw-r--r-- | clang/include/clang/Frontend/TextDiagnosticBuffer.h | 5 | ||||
-rw-r--r-- | clang/include/clang/Frontend/VerifyDiagnosticConsumer.h | 10 | ||||
-rw-r--r-- | clang/lib/Frontend/TextDiagnosticBuffer.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Frontend/VerifyDiagnosticConsumer.cpp | 6 | ||||
-rw-r--r-- | clang/test/Frontend/optimization-remark.c | 7 |
5 files changed, 25 insertions, 9 deletions
diff --git a/clang/include/clang/Frontend/TextDiagnosticBuffer.h b/clang/include/clang/Frontend/TextDiagnosticBuffer.h index feff798f623..fe5aa3e91d7 100644 --- a/clang/include/clang/Frontend/TextDiagnosticBuffer.h +++ b/clang/include/clang/Frontend/TextDiagnosticBuffer.h @@ -28,7 +28,7 @@ public: typedef DiagList::iterator iterator; typedef DiagList::const_iterator const_iterator; private: - DiagList Errors, Warnings, Notes; + DiagList Errors, Warnings, Remarks, Notes; public: const_iterator err_begin() const { return Errors.begin(); } const_iterator err_end() const { return Errors.end(); } @@ -36,6 +36,9 @@ public: const_iterator warn_begin() const { return Warnings.begin(); } const_iterator warn_end() const { return Warnings.end(); } + const_iterator remark_begin() const { return Remarks.begin(); } + const_iterator remark_end() const { return Remarks.end(); } + const_iterator note_begin() const { return Notes.begin(); } const_iterator note_end() const { return Notes.end(); } diff --git a/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h b/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h index fb026bbc2b0..084eb66d859 100644 --- a/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h +++ b/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h @@ -34,12 +34,12 @@ class FileEntry; /// comment on the line that has the diagnostic, use: /// /// \code -/// expected-{error,warning,note} +/// expected-{error,warning,remark,note} /// \endcode /// -/// to tag if it's an expected error or warning, and place the expected text -/// between {{ and }} markers. The full text doesn't have to be included, only -/// enough to ensure that the correct diagnostic was emitted. +/// to tag if it's an expected error, remark or warning, and place the expected +/// text between {{ and }} markers. The full text doesn't have to be included, +/// only enough to ensure that the correct diagnostic was emitted. /// /// Here's an example: /// @@ -184,11 +184,13 @@ public: struct ExpectedData { DirectiveList Errors; DirectiveList Warnings; + DirectiveList Remarks; DirectiveList Notes; void Reset() { llvm::DeleteContainerPointers(Errors); llvm::DeleteContainerPointers(Warnings); + llvm::DeleteContainerPointers(Remarks); llvm::DeleteContainerPointers(Notes); } diff --git a/clang/lib/Frontend/TextDiagnosticBuffer.cpp b/clang/lib/Frontend/TextDiagnosticBuffer.cpp index b1c793a9709..9c6bebb0721 100644 --- a/clang/lib/Frontend/TextDiagnosticBuffer.cpp +++ b/clang/lib/Frontend/TextDiagnosticBuffer.cpp @@ -35,6 +35,9 @@ void TextDiagnosticBuffer::HandleDiagnostic(DiagnosticsEngine::Level Level, case DiagnosticsEngine::Warning: Warnings.push_back(std::make_pair(Info.getLocation(), Buf.str())); break; + case DiagnosticsEngine::Remark: + Remarks.push_back(std::make_pair(Info.getLocation(), Buf.str())); + break; case DiagnosticsEngine::Error: case DiagnosticsEngine::Fatal: Errors.push_back(std::make_pair(Info.getLocation(), Buf.str())); @@ -50,6 +53,9 @@ void TextDiagnosticBuffer::FlushDiagnostics(DiagnosticsEngine &Diags) const { for (const_iterator it = warn_begin(), ie = warn_end(); it != ie; ++it) Diags.Report(Diags.getCustomDiagID(DiagnosticsEngine::Warning, "%0")) << it->second; + for (const_iterator it = remark_begin(), ie = remark_end(); it != ie; ++it) + Diags.Report(Diags.getCustomDiagID(DiagnosticsEngine::Remark, "%0")) + << it->second; for (const_iterator it = note_begin(), ie = note_end(); it != ie; ++it) Diags.Report(Diags.getCustomDiagID(DiagnosticsEngine::Note, "%0")) << it->second; diff --git a/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp b/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp index d6d01156557..9df39782abb 100644 --- a/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp +++ b/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp @@ -330,6 +330,8 @@ static bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, DL = ED ? &ED->Errors : NULL; else if (PH.Next("warning")) DL = ED ? &ED->Warnings : NULL; + else if (PH.Next("remark")) + DL = ED ? &ED->Remarks : NULL; else if (PH.Next("note")) DL = ED ? &ED->Notes : NULL; else if (PH.Next("no-diagnostics")) { @@ -737,6 +739,10 @@ static unsigned CheckResults(DiagnosticsEngine &Diags, SourceManager &SourceMgr, NumProblems += CheckLists(Diags, SourceMgr, "warning", ED.Warnings, Buffer.warn_begin(), Buffer.warn_end()); + // See if there are remark mismatches. + NumProblems += CheckLists(Diags, SourceMgr, "remark", ED.Remarks, + Buffer.remark_begin(), Buffer.remark_end()); + // See if there are note mismatches. NumProblems += CheckLists(Diags, SourceMgr, "note", ED.Notes, Buffer.note_begin(), Buffer.note_end()); diff --git a/clang/test/Frontend/optimization-remark.c b/clang/test/Frontend/optimization-remark.c index 03bb8f875ac..3a62db0db02 100644 --- a/clang/test/Frontend/optimization-remark.c +++ b/clang/test/Frontend/optimization-remark.c @@ -2,8 +2,7 @@ // designed to always trigger the inliner, so it should be independent // of the optimization level. -// RUN: %clang -c %s -Rpass=inline -O0 -gline-tables-only -S -o /dev/null 2> %t.err -// RUN: FileCheck < %t.err %s --check-prefix=INLINE +// RUN: %clang_cc1 %s -Rpass=inline -O0 -gline-tables-only -emit-obj -verify -S -o /dev/null 2> %t.err // RUN: %clang -c %s -Rpass=inline -O0 -S -o /dev/null 2> %t.err // RUN: FileCheck < %t.err %s --check-prefix=INLINE-NO-LOC @@ -11,9 +10,9 @@ int foo(int x, int y) __attribute__((always_inline)); int foo(int x, int y) { return x + y; } -int bar(int j) { return foo(j, j - 2); } -// INLINE: remark: foo inlined into bar [-Rpass=inline] +// expected-remark@+1 {{foo inlined into bar}} +int bar(int j) { return foo(j, j - 2); } // INLINE-NO-LOC: {{^remark: foo inlined into bar}} // INLINE-NO-LOC: note: use -gline-tables-only -gcolumn-info to track |