diff options
| author | Gabor Horvath <xazax.hun@gmail.com> | 2017-10-19 11:58:21 +0000 |
|---|---|---|
| committer | Gabor Horvath <xazax.hun@gmail.com> | 2017-10-19 11:58:21 +0000 |
| commit | d3a85702310f686e380b599fc3429b5bb51d69be (patch) | |
| tree | 1cb13752c9401c5b413f48eac5f2d35fd951f5c4 /clang | |
| parent | 4f7d5ef2260f20f9773810b05eb085d97ddfc7c1 (diff) | |
| download | bcm5719-llvm-d3a85702310f686e380b599fc3429b5bb51d69be.tar.gz bcm5719-llvm-d3a85702310f686e380b599fc3429b5bb51d69be.zip | |
[analyzer] Dump signed integers in SymIntExpr and IntSymExpr correctly
Patch by: Adam Balogh!
Differential Revision: https://reviews.llvm.org/D39048
llvm-svn: 316157
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/StaticAnalyzer/Core/SymbolManager.cpp | 12 | ||||
| -rw-r--r-- | clang/test/Analysis/expr-inspection.c | 1 |
2 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp b/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp index 4be85661b64..f2d5ee83f3c 100644 --- a/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp +++ b/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp @@ -31,14 +31,20 @@ void SymIntExpr::dumpToStream(raw_ostream &os) const { os << '('; getLHS()->dumpToStream(os); os << ") " - << BinaryOperator::getOpcodeStr(getOpcode()) << ' ' - << getRHS().getZExtValue(); + << BinaryOperator::getOpcodeStr(getOpcode()) << ' '; + if (getRHS().isUnsigned()) + os << getRHS().getZExtValue(); + else + os << getRHS().getSExtValue(); if (getRHS().isUnsigned()) os << 'U'; } void IntSymExpr::dumpToStream(raw_ostream &os) const { - os << getLHS().getZExtValue(); + if (getLHS().isUnsigned()) + os << getLHS().getZExtValue(); + else + os << getLHS().getSExtValue(); if (getLHS().isUnsigned()) os << 'U'; os << ' ' diff --git a/clang/test/Analysis/expr-inspection.c b/clang/test/Analysis/expr-inspection.c index 59406cd420a..ec0e682b653 100644 --- a/clang/test/Analysis/expr-inspection.c +++ b/clang/test/Analysis/expr-inspection.c @@ -8,6 +8,7 @@ void clang_analyzer_numTimesReached(); void foo(int x) { clang_analyzer_dump(x); // expected-warning{{reg_$0<int x>}} + clang_analyzer_dump(x + (-1)); // expected-warning{{(reg_$0<int x>) + -1}} int y = 1; clang_analyzer_printState(); for (; y < 3; ++y) |

