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

    <tr>
        <th>Summary</th>
        <td>
            incorrect code coverage after call of noreturn function in ternary expression
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            coverage
      </td>
    </tr>

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

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

<pre>
    Consider:

```
$ cat /tmp/a.c
#include <stdio.h>
#include <stdlib.h>

__attribute__((noreturn)) int foo(void) {
 exit(1);
}

int main(int argc, char **argv) {
  int x = argc ? 1 : foo();
  printf("hi\n");
  return 0;
}

$ build/bin/clang -fprofile-instr-generate -fcoverage-mapping /tmp/a.c && \
    ./a.out && \
    build/bin/llvm-profdata merge default.profraw -o default.profdata && \
    build/bin/llvm-cov show -instr-profile default.profdata -show-line-counts-or-regions a.out
hi
    1|       |#include <stdio.h>
    2|       |#include <stdlib.h>
    3|       |
    4| 0|__attribute__((noreturn)) int foo(void) {
    5|      0|  exit(1);
 6|      0|}
    7|       |
    8|      1|int main(int argc, char **argv) {
    9|      1|  int x = argc ? 1 : foo();
 ^0
   10|      0|  printf("hi\n");
   11|      1| return 0;
   12|      1|}
```

Note that the execution count for the `printf` line is 0, even though it clearly executed.

The problem goes away when removing the `noreturn` attribute.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVcGSozgM_RpxUUEZk0A4cOhJJsc97b3LGAHeMnbKNunp_fotE5IOM9NTs7uplAuenvUkWxLCezUYogb2X2B_SsQcRuuavyfb0ZS0tntvjtZ41ZGD4gXYCdh9Ldn6v73yHUoREPg5TBfgZ5HJu6VQRuq5I4Ti6EOnbDZC8fUTq1bts3lZX19FCE61c6DXV-AH4AdjHYXZGeA18BqVCdhbC_xwtaqLCFRfbpuRvqkA_JBHarGCUJ2eBeL2SSgD_BAfhRsk8CPKUTgE_gL8RbjhunW7aH5DKE4LH6E4Y45QvKyBPMshXpwyoV9gPirYHw1wvqXcEkL2WZDxiNtZ6Q74uY2xnqUWZsC0vzjbK02pMj64dCBDTgTCtJf2Sk4MlE7iclFm2FwPAi-Blwj74z0ExGyx2Tn81LqV1_o6pVG7E0HgRG4g7KgXsw5ZhJ14w9RuoIX5m56lvaIf7Ruuea1Z_ugvjaxUK0OptLMJPrUudTQoazwuydx0RvWhl0N1xNsPquOvazSS-K_526qNrGK74YHvIs6gOv6_okbE_UOBLU8_q3MsN6RHRUWg-iTCwwOPh_SfWgOx3jj5d80C-6_s4Sln36X5G52Eeb6V_6G1ooFvOB_N9t1gW9Y_bCAMowgYRkL6RnIOyhpc6g176xYcSrZGVzKM9YjKI4vHRVcyGEY7DyOqgFKTcPp9dURd9qz150h4cbbVNOFgyaN4E-_4NpJBR5O9xj5e1R4FUzJ8VFOWdE3R1UUtEmrysir5oWAsT8amLEW-k4eyrku2k21f9V2_a7ud4GVe7PNdohrOeMF4XuQsZyzPClGX-7qsmGg5q_MedowmoXQWOzSzbkiU9zM1JatYnmjRkvbLt4TzZTgtV3OMb-skisD-lLhmafF2HjzsmFY--A-XQQVNjTLSOkcyoLQd4d0Bij6QQym0Rtvj_QSwn41crkQZDOSMcPF4L468V9Yks9PNGMLFx88YPwM_DyqMc5tJO60D52mi_UUyAD8vuXng5yW9fwIAAP__b1sLEQ">