summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-16 01:15:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-16 01:15:35 +0000
commit86de3e411aa65b273d1123f7260c016f31fc08ec (patch)
tree02532d324d9925c754c326a7f100d5209cab3281
parentb67f65dbd65f7b672747ab7f7b13693441ca24d8 (diff)
compile.c: keep debug info
* compile.c (iseq_peephole_optimize): keep freezestring insn with debug info. [Bug #14475] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--compile.c3
-rw-r--r--test/ruby/test_rubyoptions.rb2
2 files changed, 4 insertions, 1 deletions
diff --git a/compile.c b/compile.c
index 7d065b25d3..ba380ab408 100644
--- a/compile.c
+++ b/compile.c
@@ -2846,11 +2846,12 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
}
if (IS_INSN_ID(iobj, freezestring) &&
+ NIL_P(OPERAND_AT(iobj, 0)) &&
IS_NEXT_INSN_ID(&iobj->link, send)) {
INSN *niobj = (INSN *)iobj->link.next;
struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(niobj, 0);
/*
- * freezestring debug_info
+ * freezestring nil # no debug_info
* send <:+@, 0, ARG_SIMPLE> # :-@, too
* =>
* send <:+@, 0, ARG_SIMPLE> # :-@, too
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb
index 0fc96b5743..083572ca67 100644
--- a/test/ruby/test_rubyoptions.rb
+++ b/test/ruby/test_rubyoptions.rb
@@ -947,6 +947,8 @@ class TestRubyOptions < Test::Unit::TestCase
[
['"foo" << "bar"', err],
['"foo#{123}bar" << "bar"', err],
+ ['+"foo#{123}bar" << "bar"', []],
+ ['-"foo#{123}bar" << "bar"', freeze && debug ? with_debug_pat : wo_debug_pat],
].each do |code, expected|
assert_in_out_err(opt, code, [], expected, [opt, code])
end