[PATCH] D45417: [analyzer] Don't crash on printing ConcreteInt of size >64 bits

Aleksei Sidorin via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 10 09:40:13 PDT 2018


a.sidorin updated this revision to Diff 141869.
a.sidorin edited the summary of this revision.
a.sidorin added a comment.

After thinking a bit more, I have removed the FIXME at all: dumping SVal is an extremely rare event so this shouldn't affect the performance.


Repository:
  rC Clang

https://reviews.llvm.org/D45417

Files:
  lib/StaticAnalyzer/Core/SVals.cpp
  test/Analysis/egraph-dump-int128.c


Index: test/Analysis/egraph-dump-int128.c
===================================================================
--- /dev/null
+++ test/Analysis/egraph-dump-int128.c
@@ -0,0 +1,7 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection %s -verify
+
+void clang_analyzer_dump(unsigned __int128 x);
+
+void testDumpInt128() {
+  clang_analyzer_dump((unsigned __int128)5 << 64); // expected-warning{{92233720368547758080 U128b}}
+}
Index: lib/StaticAnalyzer/Core/SVals.cpp
===================================================================
--- lib/StaticAnalyzer/Core/SVals.cpp
+++ lib/StaticAnalyzer/Core/SVals.cpp
@@ -300,13 +300,9 @@
 void NonLoc::dumpToStream(raw_ostream &os) const {
   switch (getSubKind()) {
     case nonloc::ConcreteIntKind: {
-      const nonloc::ConcreteInt& C = castAs<nonloc::ConcreteInt>();
-      if (C.getValue().isUnsigned())
-        os << C.getValue().getZExtValue();
-      else
-        os << C.getValue().getSExtValue();
-      os << ' ' << (C.getValue().isUnsigned() ? 'U' : 'S')
-         << C.getValue().getBitWidth() << 'b';
+      const auto &Value = castAs<nonloc::ConcreteInt>().getValue();
+      os << Value << ' ' << (Value.isSigned() ? 'S' : 'U')
+         << Value.getBitWidth() << 'b';
       break;
     }
     case nonloc::SymbolValKind:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45417.141869.patch
Type: text/x-patch
Size: 1300 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180410/32e6d9ad/attachment.bin>


More information about the cfe-commits mailing list