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

    <tr>
        <th>Summary</th>
        <td>
            Clang doesn't suppress warnings in system headers if they are also found with -iquote
        </td>
    </tr>

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

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

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

<pre>
    https://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-in-system-headers states that

> Warnings are suppressed when they occur in system headers. By default, an included file is treated as a system header if it is found in an include path specified by `-isystem` [...]

without further conditions on the include directories specified by `-isystem`.

Given the setup:

```
$ cat /tmp/a/a.c 
#include "b.h"
$ cat /tmp/b/b.h 
/* /* */
```

Both GCC and Clang agree that a warning should be generated if the header is found with `-iquote`:

```
$ gcc-14 -Wcomment -c /tmp/a/a.c -iquote /tmp/b
In file included from /tmp/a/a.c:1:
/tmp/b/b.h:1:4: warning: "/*" within comment [-Wcomment]
    1 | /* /* */
$ clang -Wcomment -c /tmp/a/a.c -iquote /tmp/b
In file included from /tmp/a/a.c:1:
/tmp/b/b.h:1:4: warning: '/*' within block comment [-Wcomment]
    1 | /* /* */
      |    ^
1 warning generated.
```

Both compilers also agree that the warning should be suppressed if the header is found with `-isystem`:

```
$ gcc-14 -Wcomment -c /tmp/a/a.c -isystem /tmp/b
$ clang -Wcomment -c /tmp/a/a.c -isystem /tmp/b
```

However, if both `-iquote` and `-isystem` is used, Clang doesn't suppress the warning, while GCC does:

```
$ gcc-14 -Wcomment -c /tmp/a/a.c -iquote /tmp/b -isystem /tmp/b
$ clang -Wcomment -c /tmp/a/a.c -iquote /tmp/b -isystem /tmp/b
In file included from /tmp/a/a.c:1:
/tmp/b/b.h:1:4: warning: '/*' within block comment [-Wcomment]
    1 | /* /* */
      |    ^
1 warning generated.
```

My understanding (given the documentation) is that the GCC behavior is the correct one.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkVkGvozYQ_jXmMgKBCSQcOCRvN9se9ljt2dgDuDU2tU2i_PvKQNi8vH3tSq-HSo1AjrBn7O-bb8bDnJOdRqxJcSLFp4hNvje2Hnvno8aIW917PzqSHwk9E3rmiukuUeoyJMZ2hJ6F4Y7Q828OrfvK9MRU0vtBEZpzo701SkndxUKyThvnJXex1LG7OY9D3CMTaB04zzw68D3zJD2GJ_8M35jVUncOmEVw0zhadA4FXHvU4Hu8geF8siA1LO5gdZfA6QYCWzYpT-gLMA1SczUJFNBKhSAdeIvMowDmgL02B9mC9GFNayYtgvvvDmBkvgc3IpetRAHNDUiZxnLxQMoUSHFKkoQUnxYgV-l7M3loJ-t7tMCNFtJLox2YGcXmWUiL3Bsr0f3dBsni94u8LCyAQz-NITwLcWW6PumR0B1w5oHQsx9GQs8svAmHeS6_b0wobZKeUPojkya8Sb-YnAk9wjbMH552TI8n43v48hJYF_ASxAKss4hzcIHBdYkquN5MSkCD0KFGOwdDtjOiexzuEQgcLiz8ORmPYav34Hacx9kO4m_cDANqDzF_C3_18wgyPf6qV21sSrFmeGNL8mO2bv7E0DqzI_nxjjH8DbTOhBFKZyBSw_1spDhtB10EAwCQAdm_wHtkh_jMpP6XIO7vEPd3iI0y_I-PAIX5FxaEofhM0mO2aWdTTPKO_rgZRqlCZWHKmUcBBn29leBDdflHDW6Z-FERrlXnVYh-Pr4_tH5NxS_mihe0oQTKFhrznEVzij6VL-lgciiCzZK8wqDThO79RtIjh2HdtQ-iCikf1v7bqflhon7S4f8iOb7eYNLhivRMi7CY0EO33STC8CmcgoX7idBqvifvSRPi22DPLtLYZQKBGxvuLDAak0jUuajyikVYZ_u8pPt9XpZRXxdVyTLGuWCHskwPTdNUtCqKtD3wYt9wjGRNU1qkWbrPqqxMy2SHTXpoaZUVVUoZK8kuxYFJtXUdkXRuwjqjWXXYRYo1qNzcvlA6ayIU3eJTZOtgEDdT58guVdJ5992Fl15h_a7Gr_fm4013sVaI29yWzOXloUKscosmq576pk76fmoSbgZCz-EU6xCP1vyO3BN6nlGFXmoFdqnpXwEAAP__aEDw6w">