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

    <tr>
        <th>Summary</th>
        <td>
            [line coverage] macros from system headers after `break` have wrong execution count
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            tools:llvm-cov
      </td>
    </tr>

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

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

<pre>
    How to reproduce it (Compiler explorer [link](https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,selection:(endColumn:1,endLineNumber:22,positionColumn:1,positionLineNumber:22,selectionStartColumn:1,selectionStartLineNumber:22,startColumn:1,startLineNumber:22),source:'%23ifdef+HEADER%0A++%23define+FOO+x%2B%2B%0A%23else%0A%0A%23define+HEADER%0A++%23include+%3Cexample.cpp%3E%0A%23undef+HEADER%0A%0Aint+main(void)%0A%7B%0A++++int+x%3B%0A++++for+(int+i%3D0%3B+i%3C10%3B+i%2B%2B)+%7B%0A++++++++if+(i%3D%3D5)%0A++++++++++++break%3B%0A++++++++FOO%3B%0A++++++++x%2B%2B%3B%0A++++%7D%0A++++return+0%3B%0A%7D%0A%0A%23endif%0A'),l:'5',n:'1',o:'C%2B%2B+source+%231',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((g:!((h:compiler,i:(compiler:clang_trunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'0',intel:'1',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,libs:!(),options:'-fprofile-instr-generate+-fcoverage-mapping+-isystem.+',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+x86-64+clang+(trunk)+(Editor+%231)',t:'0')),k:50,l:'4',m:50,n:'0',o:'',s:0,t:'0'),(g:!((h:tool,i:(args:'',argsPanelShown:'0',compilerName:'x86-64+clang+(trunk)',editorid:1,fontScale:14,fontUsePx:'0',j:1,monacoEditorHasBeenAutoOpened:'1',monacoEditorOpen:'1',monacoStdin:'1',stdin:'',stdinPanelShown:'1',toolId:llvm-covtrunk,treeid:0,wrap:'1'),l:'5',n:'0',o:'llvm-cov+(clang-only)+x86-64+clang+(trunk)+(Editor+%231,+Compiler+%231)',t:'0')),header:(),l:'4',m:50,n:'0',o:'',s:0,t:'0')),k:50,l:'3',n:'0',o:'',t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)):

```shell
cat > test.h << EOF
#define FOO x++
EOF
cat > test.c << EOF
#include <test.h>
int main(void)
{
    int x;
    for (int i=0; i<10; i++) {
        if (i==5)
            break;
        FOO;
 x++;
    }
    return 0;
}
EOF
clang -fprofile-instr-generate -fcoverage-mapping -isystem. test.c -o test
./test
llvm-profdata merge default.profraw -o default.profdata
llvm-cov show -instr-profile default.profdata test
```

Coverage report where line 8 and 9 are self-contradictory.

```c
    1|       |#include <test.h>
    2| |int main(void)
    3|      1|{
    4|      1|    int x;
    5| 6|    for (int i=0; i<10; i++) {
    6|      6|        if (i==5)
 7|      1|            break;
    8|      6|        FOO;
    9| 5|        x++;
   10|      5|    }
   11|      1|    return 0;
 12|      1|}
```

(Example reduced from https://github.com/mtoyoda/sl/blob/5.02/sl.c#L108 where `getch` is from `#include <curses.h>`)

Related: https://github.com/llvm/llvm-project/issues/78920
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWE-Po7gS_zTOxUoEJiThkEMgHc2TVturHb13fTJQEM8YO7JNkv72K9uEQEL39rSmhdK4_rv4VbmAas1qAbBFcYri_Yy25ijV9nIEYeSPtjnNclm-bb_JCzYSKzgpWbYFYGYwIptMNifGQWG4nrhUoDCKU87ETxTvEdkcjTlpFO0QOSByqGWZS24WUtWOENWOFSKyQWTz_uKIol0hS3gpmZEKkYw57qZiHARtwK3WISJrRLJKCvO9oNxSw2VH-K-Gv65eLPBiPywbkYxTYX0ViMQk7X4yDRwKw6TwfkCUmeRtIzodEOUfTMCfbZODQtGOEESyk9TMqowkb8Rn8d7Fd0OVGSmNWROqzxqTgonlyFYVXYLs7iJWlVAhkn572e1f_kYkDnbI7tntPSqhYgIQSQ-vr4ik12FWnGRMIuAabquO1KtNW2Wi4G0JfhllcKXNicOiOJ3s-uVupxUTwcXBjgmDSNpQJhDZnCUr3eY8d52O3NnLi9vgo2dmZRGUIrLxUsxK7YNO1i-zcLTuM5D4HUx4HHmvOvvOsvuJ7_FO6wyvXAH9OR378HJP6N-Exg9wUjhe75-oCkyrBCJpMNS6S_ZQEKXdrVuuPeC4x1rsq0yMSlP6VTYMKu0Q2kGlkzTDWk285Z8o2sXB3cVy5CIYufAL23mCCWvZJ7qNb2v3XtNTol1he8b_jWrFT9teGDegfJPb5KNgciaoehulwJNe8x9QmBGjkE0DwrwK_jayUULe1hnlXI_ES2ioqDmMZZmyjeMMekSGKxStGYsyYYCPLHKWK6reMlmOJY1izUjwDCqXGvY-Aibqx-xWnNb6fwwurycQv703c5brweOyDuXJdstu0_PqpKQ9GeZMaKPmNQhQ1FiEzatCnkHRGuYNPZ1s6CSdM_2mDTQLB0GHoTMoxUp4dPOLp0L4S4fCc-P_7JkQfvJICB9OhPCDgn2spvS6Wc1XS0RSB37f4LoK8F1xczuc-zpOfrmUmxv5d9S0LWMjJb-XMFW1Hpqy67-oAP79KC9jl7dq_7OfLj5OgCszlwBWdg_gF7HeSEEL6ZP4jeoUQOxaI20JQTkqoqHkU4V55ndTsjFd3ykDwuPub91XSv4f65TzczMv5PnW64wCcBu0T-Ci6Gmo9kkw3Wz6FLpszqXteg5IX8BZhkia9f36M_A7Ai1dSfSl_ftwOAXv6F9PqikrnTL5kvIZlPadatnRoh0K9ii4_a4Cf-kjcO5pBTUYRS_YgDaLI0ZRhqIMv7weOpXbnIcPr6_42g0LjtXLjEwUUya6WdCyvB8UvXgmEwY_jHhead15wRhjK3RF0YBSSYX9NIcZspNclNobO8O5u26mSfDIjrNVOUUU7VE3oo3Y9s_PYtGDoh29etotEUMhtN7fF36YwkEv0XPvabNgx--dXPj53ML9qXVL9Vy6O29vgcjhvnIVZ02X1FDcgKoBl1DRlpuFJSt6sepDkpUcKBfyjPVRXnAXWRfnk8oghB5gQ9Rl3Tbsa6RUBl-OoABzi6kNpqLECaYKsAZezQspjKIlK4xUb4tJ7Bb3JIdonXVPB9kB8wOcWRlixdE6ew9zVibqTVrjI_QsR6xpXMaWs-rYXwPpqndzv3sftuunoN5H8WbS8gjXGOPE8uKBwATWw6Dn3ySH6A_Dp6ie6gGH5CHV-w8wZI8A_wKJFZRtASWulGzww6cGZo5tvihkg8ihMfJNlhSRg-aIHHIuc0QO8SIgjrQoEIn-CINNh0e0CmowxRGtAsy0t26DGIGqaJUG7WFleckwxr-BU-OO7Y_CsqXV_bMV5V4JyIFp3YJG5LDeJCSYlduoTKKEzmAbrqMgDsIkWc6O2yggURiHQV6FySYkkOdREkMO4ZKu8zjezNiWBGQZhkFISJzEywWNkyWBPKnCcl1CnKNlAA1lfGEDWEhVz5zrbRguV4TMOM2Ba_dViBA7EejBQIAIQfF-praOkLe1RsuAM2303ZphhruvSq6-bx0MxXvc0ELJLrG-jWF_JGtMKwPKZttjdhXgIz0DvigpauxfZJgUuJCtMLNW8e3X89vt87wl_wQAAP__k6Ilbg">