<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/120977>120977</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
scan-build division by zero while calculating the stats
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BebeSparkelSparkel
</td>
</tr>
</table>
<pre>
```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.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8V82O4roSfhqzsYKCA53uBYsAnbktzdxpNTNq6W6uHKcgHhw7YzvN0Ivz7Ed2QoDw02dmcSQk4tRXX5Xrzw41hq8lwBRNZmiyGNDaFkpPZ5DBsqJ6A6L9G2Qq303RXdj87C-LwsQwKoOs5iJHUYITScXOcIN1LTFTZSXAwhCFyZMQsKYC5_yNG64kznb4HbTC1GJE0kKVgEi6_aERSYV4K4NKqx_ALCJpQ07SjEtE0oM9LLgEPAlDx9955Z7D5HMraladsAItUJhgXO4wIuNn0AykTTKlLeQYRQtsKs2lXSFyjwhBZDIkK_8wd_gOSFK3_KYsFWktmeVKGoxIgkdhiMgDimbnLnGJbQF41eIxugvnVLClpdZ0oL6nps5wh8Ionh15375zThd8ZVujB7l3byYU2zSosEHsxd-lBsoKyK9D-ht0phgVVLvwjMO9D92O93qe8TiqPd5XpTefubE3IBdEXopI5ANSC2rBB7SW_GcNeMUFmCOC1K3_Q03hKVzk4sURz0r53bfgF7XFZ3vqwo1P-AIUPTqJ12oXTihpCc5GvPAWR_v94LNckJl36ZjAyzsPW6WzDF1QbDE0E3BQ76XA6ZEZ5qtT1b00XmD4iRGJd2AQiU9c6GXqCtNjWdndgUeqPs0fOYJRPEfx_J-bcgE47wCfuNPa3cDO-A6fHCfWlXHXu_1acw3wr02OnpWzdrpp6hR9yV5TIjdNXurQm1bPFEjaph__4YZNV_4fWz_vlLTXdUfO9KZ0b6AureZy3QwNQvx59u73c9LDWfPH5YXNrbo4E9KaHTquE7QvymZmTeayhzwqmI4M0_YNUC12flr1y9DX88NlvpOqKGje0WX7iN1fLrhbpP2kO95arrjkxqVtq_RGcGN77Gcz5bqBfl5bZ7egAUt4A427Ejnz_1A_pxYOWddgay17mW_lzSg5PcG_FeDuNCWVOd5Sg6Kkd2ibwq1IhMjocF8pWpAbJhrcqUUxE0AlVrWtaotzroFZpXcoTF4en7--fPv_4ukFRQsfg9SWFSIp30Ae0PZ21QSq3ORc46BqY3Wk6sUoTP76jcsUmsx9UILAWGprE2T12hy9rQ0EjKFowQR1_bEX0KZDggJoDvpIgylprKZcWoM1lWvYiwKQ7rgKWAFsAxpTURV0yJSG4bPi0oJONLdFCZazA92HSss6-wBtgNWa290w0ZruZqqW-W2fasl_DZdWAy2vUnsX5lSIROZfwBh62Ohl7IK_8Rz-5-6-N3H_rYVYgIYVaJDsA9Jacsktp4K_Q97sb1lnhmle2d_S9N8Cv6Mx01Sy4qpGDjRnKofhAmi-tEqDuRbzfXqucvl0JM9PtwFfqBDqeuF4DDO-14czmi_5OyR6fc2pE7hLyREWByX9JZSqcBQe3qlL_XgQm-bWvl--dY8l3RySPE8_J5-WzQwIXqkQOHga4uDVOcKs62er7K4Cg4PXkhvD5fr4ZUffCXNggurmHuN4CpqrLQ5eq6Z5AupaDgevjBob_KypOOJwJRG4jzmqAQeLxePs-6d2xlz8xPlagZwtF9jNLGw0O0y44SCfRvlD9EAHMB3F0fghDsd38aCY0ixejUme3ZMJGwOZ5GRMsjya3JN4zO7juwGfkpCMR4REo7vRmMTD-xGMxgweWJQRxu5XaBxCSbkYuok3VHo94MbUMB2R8CGOB4JmIIz_xiVEwhZ7qdvGZDHQUz8m3chD49CfWQcay62A6dGoPPuG3RZcAGb7q6Jc-zD4TA9qLaaFtZU_LkiKSLrmtqizIVNlO57Pp7T3zSCSts6_TcnfAQAA__-I6cAR">