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

    <tr>
        <th>Summary</th>
        <td>
            Clang is unable to match calls to functions with a std::initializer_list when modules are enabled and a class with a virtual destructor is defined before #include <initializer_list>
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++,
            clang:frontend,
            clang:modules
      </td>
    </tr>

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

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

<pre>
    I have commit b673135bb833a54b16c32e2073d2d7b83c90de66 checked out

Repro steps:

1. Build and install libc++:
```
$ cmake -G Ninja -B build -S runtimes -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" -DLIBCXX_ABI_UNSTABLE=On
$ cd build
$ ninja cxx cxxabi unwind
$ ninja install-cxx install-cxxabi install-unwind
```

2. Build clang
3. Attempt to compile the following file against the aforementioned installed libc++
```cpp
// initlist_test.cc
class X {
 public:
  virtual ~X() {}
};

#include <initializer_list>

void takesil(std::initializer_list<int> il) {}

void passesil() { takesil({1}); }

```

```
$ /path/to/built/clang++ -nostdinc++ -isystem/path/to/installed/clang/include/c++/v1 -fmodules -fbuiltin-module-map -fmodule-map-file=/path/to/installed/clang/include/c++/v1/module.modulemap -c -o initlist_test.cc initlist_test
```

Expected result:

clang should compile the file without any errors

Actual result:

clang fails to match the call to `takesil(...)` in `passesil()`:

```
initlist_test.cc:11:19: error: no matching function for call to 'takesil'
void passesil() { takesil({1});}
 ^~~~~~~
initlist_test.cc:9:6: note: candidate function not viable: cannot convert initializer list argument to 'std::initializer_list<int>'
void takesil(std::initializer_list<int> il) {}
     ^
1 error generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVluPm7oT_zTOy4gI7ADhIQ_JZvPXSu3-pV6O9m1l7CG4NTbCJrvtQz_7kYFctxepJ4rAl7nP_Gbgzqm9QVyRdEPS7Yz3vrbdimtuvtfcJrPSym-rB6j5AUHYplEeyixnCUvLcskYTxdlkglGkcY5k1Tm5ZKJIpaYZSBqFF9Rgu09ibckXo_PD9h2FpzH1hG2vrxJ5rDplZbAjQRlnOdag1alIHQT_ifqLJ7-45YuQDT8K0L0P3hU5guHaAPlICn6CF1vvGrQQbR99-6f98_3j-vNu_vnD58fPz28v_9I2JZQGrS8vhK2GRe8VOO6Ny_KSEJp4H7Y3D09Pa83D8-fHz9-ClII2_7fXFghR7XnEzOYI15fYZQKk8AbgsnZKBBerAPDcXvFeBOA4UmP0ROam_14xuaw9h6b1oO3IYGt0gi-Rqis1vZFmT1U4YjveVA0XPHKdtig8coaPCUC5WUqrs0QbXv0aEfoDpRRXivnnz06PxdivBSaOwdPQPKJH9q-1Eqc8gpwUJ3vuYYfT4QuCS0G2nw7Cc-3hG0uXSaUKSN0LxEIuwtaFdfqO3bPQTth95fEB6skeP4VndKELp2XQTFbv2W7UyYwQ6C7MeEsqeXOTaImqgvhJN8kgYkWhG3ghv2n2ftJTRO6a7mvCd15S-guVJYndDemd0gDRMY6L5URx71y35zH5ob1lMIz-24KXDiZckp3hwSiqrGy1wEu1aBRmWg8iRrenq7DJgqVM8DnL5URuhulzcfXoEBAZN8U0PXBb8J4_9qi8CihQ9drf9NgBnPA1bYPMLlEQ1i8KF_b3gM33wC7znbukncthsr8jdyKK-0CzhruRT3IFaGDeQski8_FMZ_PQ2FkMSgTbq4rKTh0Lf3G0TfgYuskCY-CsPVoeFiYyY4B4r0RAc1Q2e5sE81PNuV_VdinugaS3v8Yfr80MRiXjXZ5DG_BjVSSezxbZ6yHg-KlPhKEA2HNATsPFzCFIBt4t-9Dl5p8-TOer938j50Awo-kU4dJxrjDHg123KOc36RuJldMFqzgM1wlWZ4nMU1zNqtXeVVmxYKXHIslKzKW0mxRlkzITC4Fz-KZWtGYsphSSpNFwdi8EGmVxmnMlkuBWCVkEWPDlZ5rfWjmttvPlHM9rrK4oMVM8xK1G-b7OOWO-KOE3hFKR4SyddVZ43EYddcXUzsI5-l21q2Clqjs944s4hAkd9brlde4uhvAoBz0JqTyDIhQeAM-jgl3A-SAwy8zAC81Gjh2JN4h4CB0_ETgMI6UScpxeEh0vuuFt12wQmKlwhgrMYw1-OPImPWdXtXej18nwzzbK1_35VzY0FeDt9Mrajv7BUVoykPIHaG7Ier_BgAA__8lU-Hs">