[PATCH] [analyzer] Path-sensitive different.IntegerOverflow checker
Anna Zaks
zaks.anna at gmail.com
Thu Nov 13 17:14:21 PST 2014
I suspect, this code below explains why you are getting the false positives.
The issue you highlight in the example is that sometimes the analyzer doesn't know what the value of a variable is. The existing checkers minimize false positives by issuing a warning only when it's known that a value is "bad". For example, we would only warn if StateOverflow && !StateNotOverflow. This will flag much less issues, but should not produce a lot of false positives.
Are the false positives you are getting being flagged by the first if clause?
if (StateOverflow && StateNotOverflow) {
if (Pack.LValueIsTainted) {
Msg.assign("Possible integer overflow while " + Pack.Operation +
". Left operand is tainted: " + Pack.LValue + " AND " +
Pack.RValue);
reportBug(Msg, C, SL);
} else if (Pack.RValueIsTainted) {
Msg.assign("Possible integer overflow while " + Pack.Operation +
". Right operand is tainted: " + Pack.LValue + " AND " +
Pack.RValue);
reportBug(Msg, C, SL);
}
return;
}
if (StateOverflow) {
Msg.assign("Integer overflow while " + Pack.Operation + ". " + Pack.LValue +
" AND " + Pack.RValue);
reportBug(Msg, C, SL);
}
================
Comment at: lib/StaticAnalyzer/Checkers/IntegerOverflowChecker.cpp:35
@@ +34,3 @@
+ mutable std::unique_ptr<BuiltinBug> BT;
+
+ mutable std::set<SourceLocation> OverflowLoc;
----------------
j.trofimovich wrote:
> zaks.anna wrote:
> > Are you getting multiple reports on the same location? I don't think that should be happening - the bug reporting infrastructure should unique reports.
> In what way should bug reporting infrastructure unique reports? scan-build prevents existence of fully identical reports by computing digest (Digest::MD5->new->addfile(*FILE)->hexdigest; scan-build, line 247) but cases when alerts differs by message only aren't caught.
Identical issues should have the same message. Do you have identical issues with different messages?
http://reviews.llvm.org/D4066
More information about the cfe-commits
mailing list