Issue |
120977
|
Summary |
scan-build division by zero while calculating the stats
|
Labels |
new issue
|
Assignees |
|
Reporter |
BebeSparkelSparkel
|
```txt
scan-build: Analysis run complete.
Illegal division by zero at /home/wjr/llvm-project/build/bin/scan-build line 500.
```
Line 500
```perl
my $PercentAborted = sprintf("%.2f", $Aborted / $TotalFunctions * 100);
```
in the function `CalcStats`
```perl
sub CalcStats {
my $Stats = shift;
my $TotalBlocks = 0;
my $UnreachedBlocks = 0;
my $TotalFunctions = scalar(@$Stats);
my $BlockAborted = 0;
my $WorkListAborted = 0;
my $Aborted = 0;
# Calculate the unique files
my $FilesHash = {};
foreach my $Row (@$Stats) {
$FilesHash->{$Row->{Filename}} = 1;
$TotalBlocks += $Row->{Total};
$UnreachedBlocks += $Row->{Unreachable};
$BlockAborted++ if $Row->{Aborted} eq 'yes';
$WorkListAborted++ if $Row->{Empty} eq 'no';
$Aborted++ if $Row->{Aborted} eq 'yes' || $Row->{Empty} eq 'no';
}
my $TotalFiles = scalar(keys(%$FilesHash));
# Calculations
my $PercentAborted = sprintf("%.2f", $Aborted / $TotalFunctions * 100);
my $PercentBlockAborted = sprintf("%.2f", $BlockAborted / $TotalFunctions
* 100);
my $PercentWorkListAborted = sprintf("%.2f", $WorkListAborted /
$TotalFunctions * 100);
my $PercentBlocksUnreached = sprintf("%.2f", $UnreachedBlocks / $TotalBlocks
* 100);
my $StatsString = "Analyzed $TotalBlocks blocks in $TotalFunctions functions"
. " in $TotalFiles files\n"
. "$Aborted functions aborted early ($PercentAborted%)\n"
. "$BlockAborted had aborted blocks ($PercentBlockAborted%)\n"
. "$WorkListAborted had unfinished worklists ($PercentWorkListAborted%)\n"
. "$UnreachedBlocks blocks were never reached ($PercentBlocksUnreached%)\n";
return $StatsString;
}
```
The command was:
```sh
#!/bin/sh
# Create a clean output directory
REPORT_DIR="/tmp/iked-analysis"
mkdir -p "$REPORT_DIR"
~/llvm-project/build/bin/scan-build \
--status-bugs \
--use-cc=clang \
-analyze-headers \
-constraints range \
-enable-checker alpha.core.PointerArithmetic \
-enable-checker alpha.core.PointerSub \
-enable-checker alpha.security.ArrayBound \
-enable-checker alpha.unix.Stream \
-enable-checker core.CallAndMessage \
-enable-checker core.DivideZero \
-enable-checker core.NullDereference \
-enable-checker core.uninitialized.ArraySubscript \
-enable-checker core.uninitialized.Assign \
-enable-checker core.uninitialized.Branch \
-enable-checker deadcode.DeadStores \
-enable-checker security \
-enable-checker unix.API \
-enable-checker unix.Malloc \
-enable-checker unix.cstring.BadSizeArg \
-enable-checker unix.cstring.NullArg \
-maxloop 30 \
-o "$REPORT_DIR" \
-stats \
-v \
make \
CFLAGS="-Wall -I. -Wstrict-prototypes -Wmissing-prototypes \
-Wmissing-declarations -Wshadow -Wpointer-arith -Wcast-qual \
-Wsign-compare -DDEBUG"
```
in the OpenBSD iked src directory.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs