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

    <tr>
        <th>Summary</th>
        <td>
            clang::Interpreter failure to cleanup after erroneous template instantiation input
        </td>
    </tr>

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

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

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

<pre>
    Consider this input fed to a `clang-repl`:
```C++
struct NC {
    NC(int val) {}
};

template <typename T, bool MEM_MOVE = false>
class MyArray {
public:
    bool operator==(const MyArray<T, MEM_MOVE>& right) const {
        int leftCount = this->size();
        if (leftCount != right.size()) {
            return false;
        }
        for (int index = 0; index < leftCount; ++index) {
            if (fData[index] != right.fData[index]) {
                return false;
            }
 }
        return true;
    }

    int size() const { return fSize; }

    int fSize{0};
    T* fData{nullptr};
};
```
Now executing:
```C++
static_cast<bool(::MyArray<::NC, false>::*)(::MyArray<::NC, false> const &) const>(&::MyArray<::NC, false>::operator==);
```
yields this expected error:
```
In file included from <<< inputs >>>:1:
input_line_1:1:293: error: invalid operands to binary expression ('NC' and 'NC')
    1 |   ...false;}for (int index = 0; index < leftCount; ++index) {if (fData[index] != right.fData[index]) {return false;}}...
      | ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~
input_line_2:1:109: note: in instantiation of member function 'MyArray<NC>::operator==' requested here
    1 | static_cast<bool(::MyArray<::NC, false>::*)(::MyArray<::NC, false> const &) const>(&::MyArray<::NC, false>::operator==);
      |
    ^
error: Parsing failed.
```
Now executing this same snippet again will crash the repl:
```C++
static_cast<bool(::MyArray<::NC, false>::*)(::MyArray<::NC, false> const &) const>(&::MyArray<::NC, false>::operator==);
```
### P.S:
Executing a duplicated snippet won't **crash** the repl immediately.
```C++
static_cast<bool(::MyArray<::NC, false>::*)(::MyArray<::NC, false> const &) const>(&::MyArray<::NC, false>::operator==);
static_cast<bool(::MyArray<::NC, false>::*)(::MyArray<::NC, false> const &) const>(&::MyArray<::NC, false>::operator==);
```
This behavior is caused by the `clang::Interpreter` failing to cleanup property after such parsing errors.
@vgvassilev, this issue might fit your interest.
Thanks.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkV01v4zYQ_TX0ZRBBomzLPujgyA6wh6QLbNBrQEkjm12aVPnhxD30txckZfljN8gC7SkVCFskNeS8x_cokRnDtxKxJLN7MltPmLM7pcsWWStU812oLW8mtWqPZaWk4S1qsDtugMveWeiwBauAAZmnjWBye6exF2SeknxF0jVJV_4-lIrQe19Cq7HaNRaeKiDF0AQA8FQRuuDSwoEJQpehs1gPAxVrkg_Pxl-L-14wi0Dyyh57lGyP8ExoBbVSAh43jy-Pv_2-AZKvoWPCIMk3MbIRzBh4PK60ZsdzCr2rBW_G1H1GYSTVo2ZWaZKvfaGLRkljT_Ekr8Kkp_n8LHQOmm931oOID1_h9JeHKbCzlXLShhw9r3ck3xj-FxK6IHQ5Ah6DOiB0cRFGMx8Z5kou4gburmL9pdE6LU9s3DwwUn1q6JSGYUG4bPEtZJmS_H6sVmcIvjkuceh8N4UIoVszy8hseHa2vkZy2_vuYB9iusb1A8Ih1mp3HXpW3djkWTgzfF7Vcf5vvtOT8PPY2F_cp5dC9p3PhK4gIi7upROit_pK7Jf3JzfF6pN6BXzDxlkutx9ajlnevDTMWJJXXtceSb4i-eos5Fj3NqzOlglthK6CsH4p5MQOnY9UBVcsfMsvT3lru-V7NBw5itbEfQnfemwstoBa-9BbTmL1i4SOCwQuG-FabKHTag8hG1_i7mYgpBLLKhvHCp0vgkt8yYYOusxJvhrnBC4PTPA27hzS56ag5pLpo09QozFcSQiEFB56AUy2cKp4qKM8MiBFBQBJkowSL9b_gTX_hRFvLVesSbFOkuTSXD7rvy8uILPNVUO8fqCUDpRm6dIzKZXFyChwaSyTljPryVMd7HFfo4bOycZGPouzrp6qd4VUgMY_HRovkx1qvCX7M1llXIyLzW02vAZHuX5l2nC5hY5xgW3y8V4TvWb8C9dI3vdogW0Zl_DKhYBGM7MDu0MIXwP_232J0DwW-Jp8G2nYjCQyaF0veMO8EE88vipJaOGT9NgClfF2JBT4fo8tZxbF8XatPi21nwnLjUyevZdq3LEDVxq4gYY5gy3Ux7Dkp0_rOOoXaVH3Gi1qMk-DY4MfFTQCmXQ99NrPbI_AOosajGt20A8GD443J9FM08P24A8AAg8-__hhb4xD2PvtHzpu4aic9h8wqNHY5JQxk99NMmnLvF3mSzbBMivoLF1mC0onuzJfsOl0OqWsLgqsl9jNsW6zWZcvO5zNGJvwkqZ0mi7yLF1kKaXJkqWYzmd1Oq-L6TyryTTFPeMiEeKwT5TeTkJeZZbOF3k-EaxGYcKZhdLIDqX--KJLH3BXu60h01RwY815CMutwPLnZAYmncZLJiOBnjOJyhkYDxzXb6Lw8po4Lcqdtb0Jansg9GHL7c7VSaP2hD74JIa_u16rP7CxhD4EUIbQhwHXoaT_BAAA__9ea95P">