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

    <tr>
        <th>Summary</th>
        <td>
            [C++20][Modules] Clang ignores `#pragma comment` directives
        </td>
    </tr>

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

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

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

<pre>
    ### Module version:
```
$ cat mod.cpp
module;

#pragma comment(lib, "msvcprt.lib")

export module mod;

$ clang++.exe -std=c++20 -x c++-module mod.cpp -c -S -emit-llvm

$ cat mod.ll
; ModuleID = 'C:\Users\IVAN\AppData\Local\Temp\mod-3e93fd.pcm'
source_filename = "C:\\Users\\IVAN\\AppData\\Local\\Temp\\mod-3e93fd.pcm"
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc19.35.32216"

!llvm.linker.options = !{}
!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 2}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"uwtable", i32 2}
!3 = !{i32 1, !"MaxTLSAlign", i32 65536}
!4 = !{!"clang version 17.0.0 (https://github.com/llvm/llvm-project c82803097f6a89edc49577e5bb4f7309e053efcc)"}
```
### Non module version:
```
$ cat nomod.cpp
// module;

#pragma comment(lib, "msvcprt.lib")

// export module mod;

$ clang++.exe -std=c++20 nomod.cpp -c -emit-llvm -S

$ cat nomod.ll
; ModuleID = 'nomod.cpp'
source_filename = "nomod.cpp"
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc19.35.32216"

!llvm.linker.options = !{!0}
!llvm.module.flags = !{!1, !2, !3, !4}
!llvm.ident = !{!5}

!0 = !{!"/DEFAULTLIB:msvcprt.lib"}
!1 = !{i32 1, !"wchar_size", i32 2}
!2 = !{i32 8, !"PIC Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{i32 1, !"MaxTLSAlign", i32 65536}
!5 = !{!"clang version 17.0.0 (https://github.com/llvm/llvm-project c82803097f6a89edc49577e5bb4f7309e053efcc)"}
```

In the module version there's no DEFAILTLIB:msvcprt.lib attribute. The MSVC STL uses `#pragma comment`  to attach linker flags to object files, so that at linking time the right set of flags/libraries are used.

If something like `<optional>` is used, there's no problem, but if `<iostream>` (there's others as well)  is used for example, we'll get a lot of unresolved symbol errors from the linker, because we're not linking the right libraries (msvcprt.lib in this case).

The directive `#pragma detect_mismatch` (and possibly others) is also being ignored by Clang when building modules.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkV0tv2zgQ_jX0ZSBBIvU8-GDLDRAgLRZI2mtAUWObW0oUSCpO9tcvKMnxI003xfawwAKGJVHzzeObmc8wt1buOsQlSdck3Sz44PbaLG-feBfn8aLWzcuSUDZ94LNuBoXwhMZK3RG2ItGGRCuSRfNneqQJCO6g1U0o-n46bEcoYevZZrZkveG7loPQbYudI7RQsia0AkJpa59Eb1w4nlBCy3MoPvfajDF8Rq1u3rhOQCje7QhdE7oO8RkhsK4hbCOmIxpB8AzzQ3By5HOGQEBwDwG20gVKPbVvXM_1KTWfsfXMzu0GCNsAoXnlCUqrrxaNJWl1-231haTVqu833HGSVndacEXS6gHbnqRVq5uAYcm2TdiLltB88mz1YAQ-bqXCjrc4O6ez8zP_pxAXUc4CnWL9IBydwjluduig4Y4r_qIHdwyIQUvY6hD0NI8IWzE6fvnH-PLR32XJ-BXI48228KCYFkFX-JvsiMmS4D6mxXV8Z2SvXot9LrLHLAl6ERxk1-iDDfxsxGXI0pBRGmev8GOHYt-0UMnuO5pQ907qzs7eYpKvSb65tJzaH24V313Y0TiapjGO5yudr-yND9lg5y7BycnoaBqdWUhG4eiXUHoQe24erfwLx3mvwL-n53HiK3BxAv9xW8EdPqF6D0uvsPkJOxwcr9W7Udn7KX_mzw939ysld90ZOktTlp17SC5pIZSOu3lUEojzMAojILTYO9dbP9v0htCbnXT7oQ6Fbgm9GfdwugS90X-icCAKWkQsKvNtxosSG5GUaZ5jWtfJNmdRiVHKcCuEVw96VtS1Yh0V7ovujpryQZXr9IXOTXnD75a72e1vUb3XjEeVe5U4CO5_pHKT9c907sTAP2jWmeH_S228inxccd4qzXRNPqI46c8VZ1o-Qm82n25WX-8e7m7XhK2uRu8ngvNLanWtOL-iVtea83G1Sv61WqX_cbUav287cHu8Eit_ZJDQ3EKnwff49gc9Bu6ckfXgMISHPcLn-28V3D_cwWDRgo_zRqiyCMBpD-RiD9OkwzS7ToOux_L8vlvPqtXg9twBd6Op7HbgZItjwkbu9g4sOtDbyYNnSdaGG4kWuEGfRhNe1LoFq1t0e-9Jye84JsmqadW4IuyTz1DaEeozuOChN7pW2PrzenAgtzNcausM8naGE1qcYNrfWuAWDqgUoSUc3cNWG8Bn3vZ-Bis4eIBS4IWEg9JjYUNn0Gr1hA3Yl7bWCtAYbSxsjW5HHiYOx5xQ8MHi5MggdPqMtlfGThQRWpw3U_quSwuCWyS0vCDOd7eRBoWTT3jZ2QYdCvfYSttyJ_YzAbxroNfWylq9zBz42qUFrqyGGn1Sctdpgw3UL1CNi3HYYwf1IFXjX08jacNFs2RNyUq-wGWc5WXJaJREi_2yiTORZsjjJuZNTCmNEmQJz1ieJelWxAu5pBFlEaN5nCY5jcKSR1HJRIFFUaYlzUkSYculCkcZ1Ga3kNYOuMzinLGF4jUqO_6lobTDA4wv_Ualm4VZjitZDztLkkhJ6-zJi5NOjf-FquOvJUk3JF1PP3mWpJu54omC95fllXS7GIxa_ppOEHozZuw3Y6zo7wAAAP__s1DTew">