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

    <tr>
        <th>Summary</th>
        <td>
            Unexpected interaction between "-Werror=nonportable-include-path" and "-Wno-system-headers"
        </td>
    </tr>

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

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

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

<pre>
    Consider this minimal project

output of tree
````
.
├── external
│   └── external.hpp
├── internal.hpp
└── main.cpp
````

and

main.cpp
````
#include "Internal.hpp" // instead of internal.hpp
#include "External.hpp" // instead of external.hpp


int main(){}
````

the header files are empty.

Compile it with the windows port of clang with

````
clang.exe -isystem external -Werror=nonportable-include-path -Wno-system-headers main.cpp
````

The output is

````
error: non-portable path to file '"internal.hpp"'; specified path differs in case from file name on disk [-Werror,-Wnonportable-include-path]
#include "Internal.hpp"
         ^~~~~~~~~~~~~~
         "internal.hpp"
````

Note that no diagnostic is generated for `#include "External.hpp"`(!)
A diagnostic is generated if the code is compiled with `clang.exe -I external -Werror=nonportable-include-path -Wno-system-headers main.cpp`:

````
main.cpp:1:10: error: non-portable path to file '"internal.hpp"'; specified path differs in case from file name on disk [-Werror,-Wnonportable-include-path]
#include "Internal.hpp"
         ^~~~~~~~~~~~~~
         "internal.hpp"
main.cpp:2:10: error: non-portable path to file '"external.hpp"'; specified path differs in case from file name on disk [-Werror,-Wnonportable-include-path]
#include "External.hpp"
         ^~~~~~~~~~~~~~
         "external.hpp"
2 errors generated.

````

The effect is unexpected because the error (wrong case for included file) is in `main.cpp`, `-Wno-system-headers` should disable warnings that are generated from a system header, which is not the case here.
Changing `-isystem` to `-I` would enable other diagnostic for system headers which is unwanted.

Thus, AFAIK, there are currently no workarounds (unless one can enable specific warnings for system haders, I did not see such option).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVk2P4jgQ_TXhYhEFmwA55EBDt4RW2tOs5mycCvF0sCPbmdD_fstOaEI3Az3SHPawKIRg18er5-eK97p4yzdaWVmAIa6Slhylkkdek8boHyBclGyjZN3fdeua1hFdEmcAhplFcrnCSDxMPNMom0fZZnhYJe8PBE4OjOL1leWKRhsarZP-Ts7-8zv-cdU0j7NJ9SvrW7GPXKpYvFt-Kq-_c1WM_z50okwqUbcFkIjS3RgQpTj0ghfitA544fm9AfkqwvPpUYQbFI3uGD8UGtFVRLNo-RQtt_cLdhWQCmOjTEpZgyXcAIFj497isdlGHxucJtKRTrqKeLdOqkJ3ljTaBPGImqtDmL4C9ilxsIvhBGQq7RtWdnyviky_gzHaRGyrtPKB-b6G6cDQtOGYevpd6WnvN-2R2y8u7jcEPWhd2vsYBxRrgjCmZxwk5Hc6MIVrs8Qlktdr7gfZE7ENCFlKKHqXQpalhykVEdwCKY0-9kEUPyImhRb2lUTp07l-uvFl3mYgSrdfUF9vQs6fKH2Oll-7Pjh-rvEuyX9rBygP7pA6LIsflLZOCmScHECB4Q5ZKbUh3u-e-MM8ynjmlRxCr38ZT5ZBkUJjJJwQvVqLXqsYaCS53Z8TGwJk6_s6erdl65n_eg_yv7geiWtEG_192uD0X6Hto6T_HG0fawwGtOdotDPi-_K89EVANoTvi6RVcEKq_Lbag-CthbC3QmTMvOqMxjbfc4YjQ7VF4A63qg-BnGKK8T6hGz9yYzfhKLGVbuvC8x1WtONGSXWwfRfx76NR4_CrxMnw2uhj-OBdJUXlUyvt-lbg8VVgYGBgU2EHwKgBxvDa8blROX5k55-7AANUQKExihk3HF_sVV57ydqqjquPdH-rWuuxrV_Wu7_8g48IoSDRGgPK1W--SXbavHKjW1VYz2-r8DVsUYC-CHWGM6hXXNgZ4-mpxBQ7RFwEEiygU4vwdOOkxhNBFk8gny0WLGMpo_NJkbMiYxmfOOlqyP-5LHvYklx4N5SA6wCUl9zjdumPLHiC6o0_LzWlk9bUeeVcY33nDIebA7bodh9jy8Y_df3z_DM9H1Tpi7S2BXR_SZcZm02qnNE0Y_N0sRD7LGFsv1xlYikEXZXZLCmWfFLzPdQ2x82LSRV0JITw-yTdTmROE0qTjLIZnaV0HjNGGUVeVqlI6Kqg0TwBFG8dexyxNoeJyQOkfXuwOFlL6-xlklsrDwogpMP4vHWVNnkJr9JMQuI8AP8Xn4CCvQ">