[analyzer] Fix an assertion fail in hash generation.
authorGabor Horvath <xazax.hun@gmail.com>
Wed, 30 Mar 2016 10:08:59 +0000 (10:08 +0000)
committerGabor Horvath <xazax.hun@gmail.com>
Wed, 30 Mar 2016 10:08:59 +0000 (10:08 +0000)
In case the (uniqueing) location of the diagnostic is in a line that only
contains whitespaces there was an assertion fail during issue hash generation.

Unfortunately I am unable to reproduce this error with the built in checkers,
so no there is no failing test case with this patch. It would be possible to
write a debug checker for that purpuse but it does not worth the effort.

Differential Revision: http://reviews.llvm.org/D18210

llvm-svn: 264851

clang/lib/StaticAnalyzer/Core/IssueHash.cpp

index c352f12..bd5c811 100644 (file)
@@ -132,8 +132,11 @@ static std::string NormalizeLine(const SourceManager &SM, FullSourceLoc &L,
 
   StringRef Str = GetNthLineOfFile(SM.getBuffer(L.getFileID(), L),
                                    L.getExpansionLineNumber());
-  unsigned col = Str.find_first_not_of(Whitespaces);
-  col++;
+  StringRef::size_type col = Str.find_first_not_of(Whitespaces);
+  if (col == StringRef::npos)
+    col = 1; // The line only contains whitespace.
+  else
+    col++;
   SourceLocation StartOfLine =
       SM.translateLineCol(SM.getFileID(L), L.getExpansionLineNumber(), col);
   llvm::MemoryBuffer *Buffer =