<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">