<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/81405>81405</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Seemingly well defined program is optimized away as undefined
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JonPsson1
</td>
</tr>
</table>
<pre>
This (reduced csmith) program should always print '1':
```
int printf(const char *, ...);
long a, e;
short b;
int d;
int main() {
int f[2];
for (b = 0; b <= 3; b++)
;
int *g = &f[1];
d = *g;
e = d == 0 ? e : a / d;
printf("%d\n", 1);
}
```
Even though f is uninitialized, the address of f[1] is taken, which means it will not be 'register', and not automatically disqualify the whole program as undefined, IIUC. 'd' holds the value of f[1], which is unspecified, but however checked against 0 before dividing. 'e' will always be 0 regardless of 'd', since both 'a' and 'e' are 0.
The result is however that the whole program is optimized away and the call to printf is never made.
I see:
```
*** IR Dump After EarlyCSEPass on main ***
...
br i1 undef, label %cond.true, label %cond.false
cond.true: ; preds = %for.end
%1 = load i64, ptr @e, align 8, !tbaa !12
br label %cond.end
cond.false: ; preds = %for.end
%2 = load i64, ptr @a, align 8, !tbaa !12
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi i64 [ %1, %cond.true ], [ poison, %cond.false ]
store i64 %cond, ptr @e, align 8, !tbaa !12
%call = call signext i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef signext 1)
ret i32 0
}
```
It is true that the branch is undefined in a way at this point, but regardless of which branch target is chosen, the result is the same and printf will be called. I wonder if it is really correct to optimize away the printf call in this case...?
@uweigand @efriedma-quic
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVttu4zgPfhrlhhjDVuIcLnLRJhOg_9Xgn9kHkC3a5o4sZSS52ezTLyg7qbMzW3SBLYxWonj4SIqfqkKg1iLuRfksyuNCDbFzfv8_Z7-E4GyxqJy-7r91FEDIrUc91KihDj3FTsgdnL1rveohdG4wGpS5qGuAsycbQchNIeRGLJ9EfhT57fc6n760ZcWk3gi5rZ0NEepOeRDyScgDZFkm5E4sn0dt42wLig_wLgud8xGq-5496oddr8gKuWW8YjPJAfikEeWzFOXxrg7QOA6-rUAsj5CL5TPw8sC7ZdoJ-Zy-3c0CYGY-Jv7UJnMh1xyheIygp7OndibEJExHKTCI5SkJn0CBkKdZSvBWMCGlkKUW5cGm5QGKebnE5vjLon9-RQuxc0PbQQMUYLBkKZIy9CdqdhM7BKW1xxDANXDLgnWj-o6WdS4d1R30qGwAinAhY8C6CBVy6z22FCJ6vgHyAMrqdKiG6HoVqVbGXEFT-DEoQ801Rbx0zuD9TinGpbEhO2J6efntkLFrLeQGOmd0SFavygw4R_kGLqUWzlhTQ6OTaojQuQu-ooe6w_o7alCtIr54OVTYOI-g6ZU02TZFQ46Wkptud4WQg8dWeW2m-kygOEAgWyNULnYsVWzMud8cKY-QZ_OB-NYheAyDiQz3hi12Kv6iJhTAnSP13CdQF3VNzlmPCwrRTXeDFW1y1CuND_FeICC-P5Rp-PiDl__DcejP8NRE9PBZeXM9fP38RXHaNg0W3JVHW57Y6ZpWHqgYe8iVMapCA0KWtbM6i37An6WNMgHnyN50l2nUPvLDY3r2qMM0aGXjfIZW33AJWRbpyDilgdYrxnGOHsQqT5iUodbClpdCFrFSPIJFIWeJPcK-O5-BHlP5MOoPgJb_BFr9Z6BZ9vFC_wx6lnnCMev1Wx4sSwbnjjgTEOVzasrfbWAaZj4_OwrOzjVSmKQyuQ6Rhzc5HFX-bV_ZjMeIsaVFehz_iEBLyY_COfq3R4m93omYo1iXrjrLszBqst1NfPNVzJ4Oj6Pv_H2-ngY3EUSqy50dKq_sjecmqgSyoCBRA-tQ4NLZeCO_R-IaaXLyEpVvMQWpOxdGko8P7MS7oHpMrDMxTaLGaiQg1Bm8wMVZjR6o4WeBAnhMZF8777GOTFI3DhspjL1OzlLVyY64axWQa708PXDVKh8uSG1i1VWOjSfUvfr0Y6AaFnq_1LvlTi1wX2zyzXpV7mS56Pb1qsl31WZVbMp13qzyGktZyk21we16vdrggvYyl6tcFkWR56Uss91SqbKqt9six6bEHcfqFZnMmNc-c75dUAgD7rfFKi8XabRC-jdKSosXSIf8KJfHhd-zzadqaINY5YZCDG9eIkWD-6-IPdnWXOGCxsCtl-_w_qzli8GbfRfjOTCvy5OQp5ZiN1RZ7XohTxxr-vPp7N3vWEchTwlhEPKUMvgrAAD__9tD6xQ">