http://bugs.winehq.org/show_bug.cgi?id=59687 Zeb Figura <z.figura12@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |z.figura12@gmail.com --- Comment #2 from Zeb Figura <z.figura12@gmail.com> --- The problem is we look at a const expression with an initializer and think that it's a compile-time constant. A load isn't enough to prevent that. I think I assumed that is_static_expression() was passed the entire block of instructions used in computation, but of course that's not the case; it's only passed the block constructed for the initializer args. We should probably be tracking and storing in individual variables whether they're compile-time constants and then checking that for loads in is_static_expression(). I didn't trace through the entire code, but I think the effect of is_static_expression() returning true here is that we add the initializer to ctx->static_initializers instead of the block where it should be. That means it's ordered before the instructions it depends on. I'm surprised that doesn't cause an assertion but in practice it looks like DCE ends up deleting pretty much everything first. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.