<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/109951>109951</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[llvm-cov][MC/DC][Qualification] Boolean Terms with XOR are not analyzed correctly for MCDC coverage
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
escherle-validas
</td>
</tr>
</table>
<pre>
# Boolean Terms with XOR are not analyzed correctly for MCDC coverage
## Criticality: HIGH
During qualification of MCDC coverage at Validas we found that
In the following example the term “(v0^v1) && v2” is not analyzed correctly.
the exclusive operator ^ takes two boolean inputs and produces a boolean output.
Therefore it has to be instrumented as well such that the impact from v0 to the result can be analyzed.
This results in a wrongly calculated MCDC coverage measured by LLVMCov.
Note: In plain C there is no native boolean type defined, therefore instrumentation is restricted to && and ||,
but for C++ and Rust the boolean type exists and therefore operators on it should be considered for MCDC coverage.
The problem occurs within Rust and C++.
Rust example:

Source Code and generated reports:
[Test_000009.zip](https://github.com/user-attachments/files/17129197/Test_000009.zip)
C++ example:

Source Code and generated reports:
[Test_000009.zip](https://github.com/user-attachments/files/17129208/Test_000009.zip)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVV2PozYX_jXOzRGRcSCBCy42ZPLuSDvvqtPRau9GxhyCW2NTf5DJ_vrKkMx0WvVDq140iiDBh-c8H7YOd06eNGJF8j3JDysefG9shU70aBUmE1ey5W7VmPZSEbaBvTEKuYYntIODs_Q9fP38CNwiaOOBa64u37AFYaxF4dUFOmPhoT7UIMyElp-Q0AOhHwjbRLzaSi8FV9JfyOYDfLz_38dl_RCs1Cf4JXAlOym4l0aD6d5DAffwZaEIZ4TOBN2C77lfMO41-D4-VsqcIxq-8GFUOD_1aAcgd4wUlJQ1YcVESX43pYSVQNiWsC1M7LZ-AOn-ROB66RUh8UWo4OSEYEa03BsLJL8Dz39GB_5soLm6J_UYvAOuWxitaYNAB_x11QQ_Bn_FferRYmcsgvTQcwfeQIMgtfM2DKg9tjCrVwpcEP0sfxYoh5ELD501A0w0vhefWnRBeRBcR5ibnNdm0l0rHEgNHM7W6JO6gOBKBMVjt_cJDMhdsNhCc4FPn7481Ga6gv3feIyZ3msYFZca6kggColWguY-OnUT7S8jQoud1NgSdi1ddL9KXTbBQtFbKSIbb25pRTfJro5fVi8UmuDn_VcTtidsP5c8Brf4864zvkh3TeSt8y1FB7GtB9eboNromzDayRaj7j_s7zW8JhfTbRQOYIQIdjkvUi8UYqsrr6thy3VevG5UsvlwOy0pyfdfPz8-G43P3Jvh2QbnSX4grOi9H10sZUfCjifp-9CshRkIOwaHNuHec9FHAx1hR-4czj8yRrM8L8okw3SXZJSJhLddmuCmbcssL_Os2xBWLgR-NMEKhNq0ODM_oY7eYAsWR2O9e6Oa75_Q-WcaP-X6mxy_h2UnFcZ7uktZmZY7wo6_R71RW663iP-Bc2L8LkqvxtGm22yLoki6lNIk24kyaXbNNknLIs23jegyUfw3jGO0-FvjVm21actNyVdYpTu2Y3nJiu2qryijmGY8RUxpjjTb0i3fiIyWBeNbmpYrWTHKMlqyPKVplm3XlBXboi12aVpmDeWUZBQHLtVaqWlYG3taSecCViktyzxdKd6gcvPoYUzjGeZVwlicRLaKLyVNODmSURVP5xuMl17NM2uuEWaKTuX7h5qw46Fe_vzw28lB8sO_MbpWwarqL_KIdK63ZLTmJxSesOMsa85k0T1V7NcAAAD__3rbZtk">