diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-18 13:14:06 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-18 13:14:06 +0000 |
commit | 5cc56f0d9b1f41d73cee955c6dcdfc631766abb7 (patch) | |
tree | e7aafe6433d6b8deba54e20fe63d830a2bf58353 /test | |
parent | d939fdc119ce274d50114addbc83aa6ee0bfad9c (diff) | |
download | ruby-5cc56f0d9b1f41d73cee955c6dcdfc631766abb7.tar.gz |
compile.c: wrong optimization
* compile.c (compile_branch_condition): expression which has side
effects should not be eliminated.
[ruby-core:80740] [Bug #13444]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_optimization.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/ruby/test_optimization.rb b/test/ruby/test_optimization.rb index c86d40d7f9..910dc30c35 100644 --- a/test/ruby/test_optimization.rb +++ b/test/ruby/test_optimization.rb @@ -524,4 +524,47 @@ class TestRubyOptimization < Test::Unit::TestCase assert_no_match(/putstring/, insn) assert_no_match(/newrange/, insn) end + + def test_branch_condition_backquote + bug = '[ruby-core:80740] [Bug #13444] redefined backquote should be called' + class << self + def `(s) + @q = s + @r + end + end + + @q = nil + @r = nil + assert_equal("bar", ("bar" unless `foo`), bug) + assert_equal("foo", @q, bug) + + @q = nil + @r = true + assert_equal("bar", ("bar" if `foo`), bug) + assert_equal("foo", @q, bug) + + @q = nil + @r = "z" + assert_equal("bar", ("bar" if `foo#{@r}`)) + assert_equal("fooz", @q, bug) + end + + def test_branch_condition_def + bug = '[ruby-core:80740] [Bug #13444] method should be defined' + c = Class.new do + raise "bug" unless def t;:ok;end + end + assert_nothing_raised(NoMethodError, bug) do + assert_equal(:ok, c.new.t) + end + end + + def test_branch_condition_defs + bug = '[ruby-core:80740] [Bug #13444] singleton method should be defined' + raise "bug" unless def self.t;:ok;end + assert_nothing_raised(NameError, bug) do + assert_equal(:ok, t) + end + end end |