<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/77871>77871</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Malformed MC/DC Coverage record with macro definitions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            evodius96
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          chapuni
      </td>
    </tr>
</table>

<pre>
    Clang -fcoverage-mcdc emits malformed records to crash llvm-cov with `assert(NumConds == 0);` if:

1. At least two decisions (passes with one decision)
2. Each expression has terms that come from macro definitions

Reproducible code (https://godbolt.org/z/xMGPafdvG)
```
#define D 1

extern void bar(void);

void foo(int a, int b) {
  if (a && D) bar();
 if (b && D) bar();
}
```

Unexpected `Branch` order will be seen.

```
  Decision,File 0, 6:7 -> 6:13 = M:0, C:2
 Branch,File 0, 6:7 -> 6:8 = #2, (#0 - #2) [1,2,0] 
  Expansion,File 0, 6:12 -> 6:13 = #2 (Expanded file = 1)
...
  Decision,File 0, 7:7 -> 7:13 = M:1, C:2
  Branch,File 0, 7:7 -> 7:8 = #5, (#0 - #5) [1,2,0] 
 Expansion,File 0, 7:12 -> 7:13 = #5 (Expanded file = 2)
...
 Branch,File 1, 1:11 -> 1:12 = 0, 0 [2,0,0] 
...
  Branch,File 2, 1:11 -> 1:12 = 0, 0 [2,0,0] 
```
("Decision, branch, branch, decision, branch, branch" is expected)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVd2OqzYQfprJzSjIHsJPLrjYhZNztVVVqQ9g8BBcAY5sJ7vt01cmbE52N9pKlSLi5Jv5fjCMlffmODNXkD0DEV-sNme_z4EIsmajzmGwruoGdTrPZtNa_XdVj2o-4rbv7IWdOvJ26nSHPJngcVJjb93EGh131mmPwWLnlB9wHC_TtrMXfDVhQMiF8p5dACp_O0-1nbVHSBtIGxRAe0ifIRdoekifQDQg1qtM8CngyMoHDK8WNXfGGzt7BCpPkdJfBezMNzDyLd2U4A_VDchvJ8c-Qjgoj4Hd5DEMKmBnJ8be2Qkn1bnI35vZhKhwb-MPPjmrz51pR8bOao7yQwgnH_3SAehwtLq1Y0isOwId_gE6vL38_F31-vLz5gdysX6uPyld9BgblPdy_BbYzXixRmOrHFAZl-ttuqtbCnprgUozB1RANcZFC7RHKNZaRNNHvwqBcqAcmwhfee8517L2P8qgaB6nWa5_zvx24i6wjnv-7NTcDXFnrdPs8NWMI7aMnnlO7ts-cSE2t72sD2bk-JDUmEP6VOAW0h_LUqbxEcIXSJ8WuIb0iVaCVfmb7nJpBkopgkvIVOB2_WePkD1LoDqiArIG3539eDup-aE1SV-8RbLIvTRp1tjHjojI21ORJMm3qYtfvouPqeXn1I9if2q_xc6-xM6-if04dXGXuviQOnucmh6k_uh5ySQjl7zyyqvGOilqFNHi1d4Hi3e38SMj_V_GL69rCUR3W4Ttu87dSn-LExqP728I0H6jq1Tv073acCULkYl0J2W-GapOtpTvszbf5dTvyjLb5ZKLvE3TkkW5lxtTkaCdkJLELs1knmRCMAm964tUtIXuYSd4UmZM4iSOY2ljvD9zVRRlITejann06zEw8ysu4HoMuGqZ3u356GEnRuOD_8USTBi5erlN_pca6NDUWK_nw3oUXMfyl6m6Obux-jQ5TRjObdLZCegQZdav7cnZv7gLQIfFnAc6LOb_DQAA__-Skdi9">