From: mame@... Date: 2018-08-07T23:04:22+00:00 Subject: [ruby-core:88330] [Ruby trunk Bug#14974] "if" statement executes wrong branch Issue #14974 has been updated by mame (Yusuke Endoh). jeremyevans0 (Jeremy Evans) wrote: > This appears to be a duplicate of #14897. Yes, it is already fixed in trunk. Please wait for the next release. Anyway, thank you for the report! OT: I'm surprised that multiple persons encounter this issue because it occurs only when a nonsense assignment like `foo = foo` is used. ---------------------------------------- Bug #14974: "if" statement executes wrong branch https://bugs.ruby-lang.org/issues/14974#change-73359 * Author: kratob (Tobias Kraze) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- I've stumbled over a rather weird bug where Ruby 2.5+ executes an `else` branch of a condition when it should not. The best minimal example I could come up with is this: ~~~ def broken foo = 1 if is_true or is_false foo = foo else raise "FAIL" end puts "PASS" end def is_true true end def is_false false end broken() ~~~ For me this script raises "FAIL" instead of printing "PASS". Note that this is actually pretty much minimal; any of the following will "fix" the issue: * inlining `is_true` or `is_false` * removing the `foo = foo` or adding any other code to the `if` branch * replacing `raise "FAIL"` with `puts "FAIL"` * removing the `puts "PASS"` -- https://bugs.ruby-lang.org/ Unsubscribe: