On 8 July 2015 at 20:03, David Malcolm wrote: > On Wed, 2015-07-08 at 20:01 +0100, Dibyendu Majumdar wrote: >> On 8 July 2015 at 18:46, David Malcolm wrote: >> > Dibyendu: what Lua code generated the reproducer? What is the code >> > meant to be doing? >> > >> >> Hi Dave - the Lua test is this: >> >> function x() >> local IX >> if ((10 or true) and false) then >> IX = true >> end; >> return ((10 or true) and false) >> end >> assert(x() == false) >> >> In the original test IX is an upvalue - i.e. a variable in outer >> scope. This is my standalone version of the test. The original test is >> generated as part of the Lua test suite - its purpose is to test >> various permutations of boolean operators. >> >> The original test compares IX and the function return. >> >> The issue is that this test should return false - if you see the >> return statement. However when -O2 or -O3 is enabled it returns true. >> >> The if statement is indeed redundant in this cut down version as IX is >> a local variable. But the return statement is not redundant. > > Thanks. What does this look like as bytecodes? > Ok the bug is still there - I was running the test incorrectly. I have attached the standalone replication and the output. Note that if I remove the redundant if statement then it works correctly. Regards Dibyendu