From: Ted Kremenek Date: Tue, 27 Jan 2009 01:53:39 +0000 (+0000) Subject: PathDiagnostics: X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a26ddabc0eb8cf8ea4de1878f84d3b920fc2349f;p=clang PathDiagnostics: - Add the distinction between the 'bug type' and the 'bug description' HTMLDiagnostics: - Output the bug type field as HTML comments scan-build: - Use the bug type field instead of the bug description for the HTML table. - Radar filing now automatically picks up the bug description in the title (addresses ) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63084 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h index bedc6da40f..bc68ac5911 100644 --- a/include/clang/Analysis/PathDiagnostic.h +++ b/include/clang/Analysis/PathDiagnostic.h @@ -78,20 +78,23 @@ class PathDiagnostic { unsigned Size; std::string Desc; std::string Category; + std::string BugType; std::vector OtherDesc; public: PathDiagnostic() : Size(0) {} - PathDiagnostic(const char* desc, const char* category) - : Size(0), Desc(desc), Category(category) {} + PathDiagnostic(const char* bugtype, const char* desc, const char* category) + : Size(0), Desc(desc), Category(category), BugType(bugtype) {} - PathDiagnostic(const std::string& desc, const std::string& category) - : Size(0), Desc(desc), Category(category) {} + PathDiagnostic(const std::string& bugtype, const std::string& desc, + const std::string& category) + : Size(0), Desc(desc), Category(category), BugType(bugtype) {} ~PathDiagnostic(); const std::string& getDescription() const { return Desc; } + const std::string& getBugType() const { return BugType; } const std::string& getCategory() const { return Category; } typedef std::vector::const_iterator meta_iterator; diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp index b08f5cb793..f59f89a1a8 100644 --- a/lib/Analysis/BugReporter.cpp +++ b/lib/Analysis/BugReporter.cpp @@ -727,6 +727,7 @@ void BugReporter::EmitWarning(BugReport& R) { return; llvm::OwningPtr D(new PathDiagnostic(R.getName(), + R.getDescription(), R.getCategory())); GeneratePathDiagnostic(*D.get(), R); diff --git a/lib/Driver/HTMLDiagnostics.cpp b/lib/Driver/HTMLDiagnostics.cpp index 2772cf3422..6b60588ca5 100644 --- a/lib/Driver/HTMLDiagnostics.cpp +++ b/lib/Driver/HTMLDiagnostics.cpp @@ -246,6 +246,14 @@ void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D) { R.InsertStrBefore(SMgr.getLocForStartOfFile(FID), os.str()); } + const std::string& BugType = D.getBugType(); + if (!BugType.empty()) { + std::string s; + llvm::raw_string_ostream os(s); + os << "\n\n"; + R.InsertStrBefore(SMgr.getLocForStartOfFile(FID), os.str()); + } + const std::string& BugCategory = D.getCategory(); if (!BugCategory.empty()) { diff --git a/utils/scan-build b/utils/scan-build index 44f0cbc641..39b9ede939 100755 --- a/utils/scan-build +++ b/utils/scan-build @@ -350,7 +350,7 @@ sub ScanFile { # Scan the report file for tags. open(IN, "$Dir/$FName") or DieDiag("Cannot open '$Dir/$FName'\n"); - my $BugDesc = ""; + my $BugType = ""; my $BugFile = ""; my $BugCategory; my $BugPathLength = 1; @@ -361,8 +361,8 @@ sub ScanFile { last if ($found == 5); - if (/$/) { - $BugDesc = $1; + if (/$/) { + $BugType = $1; ++$found; } elsif (/$/) { @@ -390,7 +390,7 @@ sub ScanFile { $BugCategory = "Other"; } - push @$Index,[ $FName, $BugCategory, $BugDesc, $BugFile, $BugLine, + push @$Index,[ $FName, $BugCategory, $BugType, $BugFile, $BugLine, $BugPathLength ]; }