<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54093>54093</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Infinite loop is happening with `-no-enable-noundef-analysis` option
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Saldivarcher
</td>
</tr>
</table>
<pre>
After commit 8a156d1 this sample code (smallest I could get it), causes an infinte loop. The `noundef-analysis` flag has since been disabled, so by default the infinite loop doesn't happen.
I tracked down the issue to be that before the commit, this [branch](https://github.com/llvm/llvm-project/blob/main/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp#L2741) was getting hit because the previous check would always hit this [return](https://github.com/llvm/llvm-project/commit/8a156d1#diff-002ae337f07421dd530c34dceada72ac11c56191e5f653b42ee27cdaef892734L2686).
```c
#define SKM_sk_value(type, st,i) \
((type *)sk_value(CHECKED_STACK_OF(type, st), i))
#define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i))
#define ASN1_TFLG_NDEF (0x1<<11)
#define ASN1_TFLG_SK_MASK (0x3 << 1)
#define ASN1_TFLG_EXPTAG (0x2 << 3)
#define ASN1_ITEM_ptr(iptr) (iptr)
int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
const ASN1_ITEM *it, int tag, int aclass)
{
const ASN1_TEMPLATE *tt = NULL;
int i;
for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
const ASN1_TEMPLATE *seqtt; ASN1_VALUE **pseqval;
int tmplen;
seqtt = asn1_do_adb(pval, tt, 1);
tmplen = asn1_template_ex_i2d(pseqval, NULL, seqtt, -1, aclass);
}
for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
const ASN1_TEMPLATE *seqtt;
ASN1_VALUE **pseqval;
seqtt = asn1_do_adb(pval, tt, 1);
asn1_template_ex_i2d(pseqval, out, seqtt, -1, aclass);
}
return 0;
}
static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
const ASN1_TEMPLATE *tt, int tag, int iclass)
{
int i, ret, flags, ttag, tclass, ndef;
ASN1_VALUE *tval;
flags = tt->flags;
if ((flags & ASN1_TFLG_NDEF) && (iclass & ASN1_TFLG_NDEF))
ndef = 2;
else
ndef = 1;
if (flags & ASN1_TFLG_SK_MASK) {
STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
int sktag;
int skcontlen, sklen;
ASN1_VALUE *skitem;
for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
skitem = sk_ASN1_VALUE_value(sk, i);
}
sklen = ASN1_object_size(ndef, skcontlen, sktag);
if (flags & ASN1_TFLG_EXPTAG)
ret = ASN1_object_size(ndef, sklen, ttag);
if (!out || ret == -1)
return ret;
if (ndef == 2) {
ASN1_put_eoc(out);
}
return ret;
}
return 0;
}
```
```bash
$ clang -c reproduce.c -march=znver2 -O3 -Xclang -no-enable-noundef-analysis
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNV0uT2jgQ_jXmojLlBxh84MDwyE4Nk6QKspWbS5Zl0GJkryXPZPLr05JssBlDkt09LOXCD3V_6v7U3VLHefI2m6eSlojkpxOTaIrdcZC4SB6YQAKfiozCUEKR5U3FCWcZFRI9wqcqS9CeSsSk5YWWt0AEV4IKhDliPGVcUpTleTFEuwMoBw7PK57Q1MYcZ2-CCfiE0gzv0QHDRIwTimJKOUqYwHFGEwUpchS_IdDCVSbBJGqgWY2NkpwKbnkTCSBFQfkQWc7Scubm_xHJEpMjTUDulRt1ISqKJMDC_wFLuKd5SfWYIUBNq323xg9xiTk5WOMl-H6QshCWP7e8NVx7Jg9VPAQVeMmyl-ZmF2X-FyWAso6zPIbbCTPekmHq2w5wBcx7EvDyyIVc5KeYcdp929IMkIakKCzP33iTkQtEo1dgC2iXjANzTDmgedceFCV9YXklEDlQckSveo1w9orfhJZt_CqprEr-D_1qaFrXkQLGJSxNbcfxMPX9SepMRp6bJGPfIf4oIRQneOJh4rpkHLihS8dpMPbjkUepNyEJpuk09Cb-aOMF0wA8HLaXEILEXKR-h8koRABF26fnSByjF5xVwNtUvhVUR4xaQKaIssYLo4PqH0jVgvAISGFLffHHavG0Wkbb3XzxFH1aXyHq-Gb6Hl4bAijz7Uc3-nO--bI6A2o7tMq1pRdhJVGLhvVzd46rmbTmbr35EH1crtYItRxzvrmWv4DLdXtMvChun6Ln-fapregjo4nua66-ft7NP3Sm9BpN_77Jj7vVc1TIUvmnbyG6PLb1oGgYDUjwU0S_RcxLOoyZhZsXwKUirOKC7TnkNzngsh7LK8V8d-U7P5JDil0MU2om69XsEu-bR0wyLMTFwsnDBbSFARCfN_OdNk1KYGSJPn7ZbCy_Ja7g2PnL5TuUAM2E1nJ05TEITNqWvwISigxLCun5gJTQohmA6sul-irB8gd96WAzj0Bv29g7Bgv6t9Q49e890yChyPav8DRXam_g74Y0pvYCC-5GSR7hBIretFk0qcnWwXatahAvug0Bl1Bo7AEEzbLKT-0DPNiu-r8sWxvdmiz_t-R3hX95Cf4Fzz8n12TRb3KrXszWAnyeo73LvJBYMmISrN-K_zbb-xO_m7Q9yc_uJL_JZhAEX9VNHWKEYdwAyFp5gdSBp8NV1zl5va4aSq-p1LFmoN8XDpbWu1mt4AVXm4OpsYEaUDGuDeoXO_vY0KRs1iZ4HdNoJugNQfemhX3m1VtQb6a0tt_2NhnqdDnqyWDonpT2yIRMX80SR7VG_SMQH1IVNBX3x77K1l08cVS7VI_rPcXlXEK6hwVendT-fzQZdbeG6IzXM2rIG4eO4_mccm17J0kNWFNqNVAeq-NdJNh3BaTjVvPQIUXHd3jD5dsrbo4O7wKtLhc_t6GeX_7C9JbnQkkAbxdwNehqAtu9Nb8qVyqT78E2oW7S4tb6aCeKSkY0J6Cka9Odleh-7rHkhvSdEtuclnuP0DEWh-Z8NkJQEqCDsAnAwdk-qQgdEmSfcAkNj7_8zl9o6SH7k4_sr7Uoz23KVWtmv2vluhMNkpmfhH6IB5JB8Myg42g3OeMleux0cdCUmPZN9TSv0IGodvHedNA55oVkOR9UZTb77Q5GN4Gq9RqPnNAfHGbTJEzjICXjER6l1AuwP4kpNDJxEKZh4ONBhmOof8oRsH7AZp7jqStwHAcwhklKJg5OXTzGDg4d1xo5FPq-bKgmHublflDOtA1xBeV85GRMSHEZhNqsNjba4ONKHvJytsVZwl7UgtByoG2eaYN_ANbzYkY">