summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--error.c8
-rw-r--r--test/ruby/test_exception.rb14
2 files changed, 21 insertions, 1 deletions
diff --git a/error.c b/error.c
index ffdd1a4ef1..7f9e582930 100644
--- a/error.c
+++ b/error.c
@@ -329,7 +329,13 @@ rb_warn_m(int argc, VALUE *argv, VALUE exc)
rb_io_puts(argc, argv, str);
RBASIC_SET_CLASS(str, rb_cString);
}
- rb_write_warning_str(str);
+ if (exc == rb_mWarning) {
+ rb_must_asciicompat(str);
+ rb_write_error_str(str);
+ }
+ else {
+ rb_write_warning_str(str);
+ }
}
return Qnil;
}
diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb
index bcad728789..3622cae0d9 100644
--- a/test/ruby/test_exception.rb
+++ b/test/ruby/test_exception.rb
@@ -1034,6 +1034,20 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status|
assert_match(/^\tfrom #{Regexp.escape(path)}:1:/, warning.first)
end
+ def test_warning_warn_super
+ assert_in_out_err(%[-W0], "#{<<~"{#"}\n#{<<~'};'}", [], /instance variable @a not initialized/)
+ {#
+ module Warning
+ def warn(message)
+ super
+ end
+ end
+
+ $VERBOSE = true
+ @a
+ };
+ end
+
def test_undefined_backtrace
assert_separately([], "#{<<-"begin;"}\n#{<<-"end;"}")
begin;