<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98610>98610</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang hangs forever building under -O1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kongy
</td>
</tr>
</table>
<pre>
ToT Clang hangs when building under -O1.
```
clang++ test.i -fno-exceptions -O1 -c -emit-llvm
```
The reproducer, `test.i`:
```c++
class MockDevice;
struct sp {
MockDevice operator*();
};
void memset(void *__dest, int __ch, unsigned __len) {
long __trans_tmp_1 = __builtin_object_size(__dest, 0);
__builtin___memset_chk(__dest, __ch, __len, __trans_tmp_1);
}
template <class>
class function;
template <class _Rp, class... _ArgTypes>
class function<_Rp(_ArgTypes...)> {
public:
template <class _Fp>
function operator=(_Fp);
};
template <typename T>
struct hidl_vec {
hidl_vec() : mSize() { memset(mPad, 0, 0); }
hidl_vec(hidl_vec &other) { *this = other; }
hidl_vec &operator=(hidl_vec &other) {
copyFrom(other, other.mSize);
return *this;
}
T &operator[](unsigned index) { return mBuffer[index]; }
T* mBuffer;
unsigned mSize;
unsigned mPad[];
template <typename Array>
void copyFrom(Array &data, unsigned size) {
mSize = size;
if (mSize) mBuffer = new T();
for (int i = 0; i < size; ++i) mBuffer[i] = data[i];
}
};
struct Capabilities {
struct OperandPerformance {
int a, b, c;
};
hidl_vec<OperandPerformance> operandPerformance;
};
template <typename>
class Action;
template <typename R, typename... Args>
class Action<R(Args...)> {
using F = R();
public:
template <typename G>
Action(G fun) {
fun_ = fun;
}
function<F> fun_;
};
struct OnCallSpec {
OnCallSpec WillByDefault(Action<void()>);
};
struct MockSpec {
OnCallSpec InternalDefaultActionSetAt();
};
struct MockDevice {
MockSpec gmock_getCapabilities();
};
sp createMockDevice_mockDevice;
MockDevice createMockDevice() {
Capabilities getCapabilities_ret;
(*createMockDevice_mockDevice)
.gmock_getCapabilities()
.InternalDefaultActionSetAt()
.WillByDefault(getCapabilities_ret);
return *createMockDevice_mockDevice;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVk2P4jgT_jXmYhEFBxo45JCGYfQeXs2oG2mPVnAqibcTO7IdZthfv7Lz5dDQO1KLTuKqp576dKVa80IAxGjzijbHRdqaUqr4Q4ritrjI7Baf5RkfqlQUuExFofGvEgS-tLzKuChwKzJQePljFaDwiMKk_30J-z_3yqw6Iq-IvGID2gQcL3Mhl_CbQWO4FNoi4CXDS6i5WVbVtX4I1P2eS8AKGiWzloFC5IDRS9jhWskoeUiFdQRGRlrj_0v2cYQrZ4Ci_kAb1TKDdYPRtv-EPTksG1CpkQqRBJEdIvtRE22P4_NV8gzXUGswiOzcGyIJpRloY_lyYTClrLTPrXAZyDClFQhE9r7lSooCU2pUKjQ1dUNXGEVHTKlNgOGCysvfwAzV_B9AZDdZCH1qnjylHS3Kyo-ZwkCnZ3GYW7131D0YqJsqNYBRdHABRdE3P7x5K5jN7qj5SQHTt8baci9BEGCaqOJ8a-A51MGp7EbBIAgcuW9e2Jr2UnE2FgLGDwyfmtEEHuGn9EZHa-TUPMuwj2huDYi0BnweIfsyKnlW0SswP6XDt658MIoSXL936euTP1VO_TPN-myOKcVj_H2oyRJ5kaa0bdFhIZKYkmtXNt3BDALPFGfeP4McNDFmsrmdlKwR2fUCh85G0HvklaAC0yox0Jm--1zOMxJuICGyGxuEiwx-D371ePVrm-dghbvTzfHOvzMiySg1WR1BO6aPDmzsOw7T6cO0J0qlN6-aXL97sXHn1rUsNems5bu2vYuqY-TypefUMOY5tlXRB3dwy8kK-GV9nY0kq5JLZXXsxOFOMLQBso-HAR93k5F7kDaeaHN0Co519z4hjxH2m6Kv-kPapBdeccNB-671xz9sgkX2E1QuVZ0KBnP_LVUXposbDXelEn1upOjwGdIOBPng6x-28t34SZ7PsbEK3izb4c3OskQV92NswDm8ubIoHk4v3Gp7s55c8N_uU_rlbBvJfPfKsTdKdt_tnPtUbnkrqDNlDx-2pTd8T5aq1XgYySHB4pBW1Xszm3vex794Vb3ejpCnbWWn3BgV2ziDv9-eTd7eiL2Tn5v4nzCgRFr1RjoL72AS88Wt7SH3t_2EPZorask-aAHGr_KvQBvMFKQGJlhaf947PKP34tPF0HOZ9dcdE6rA-Fm0uslXBMi-lw2-8mysFoyD_4xtj3ef5kdMZ8NquiL-JGLTBBo2vEUWR9k-2qcLiFdbEm53YRSGizJmZLuJNuvdNnwh2zXZbvZ5uCIRy_Zks14xtuAxCck63K7IKoxW6zCAF9jnl_UqZCS7QBaidQh1yqvArqaBVMWCa91CvN-9rMJFlV6g0m6FJqRfdondplVs5ZeXttBoHVZcGz0hGG4qiP3VOpcKrqAebNeLVlVxaUyjbeeTEyKngpuyvQTMXjEntzF3_5aNknYnROTkOGpETh3Na0z-DQAA__9AxYk9">