Project

General

Profile

Actions

Bug #14974

closed

"if" statement executes wrong branch

Added by kratob (Tobias Kraze) over 5 years ago. Updated over 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
[ruby-core:88327]

Description

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"

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #14897: Unexpected behavior of `if` in specific codeClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0