summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* [ruby/fileutils] Enhanced RDoc (https://github.com/ruby/fileutils/pull/83)Burdette Lamar2022-06-111-13/+63
| | | | | | Treats ::chmod_R and ::chown. https://github.com/ruby/fileutils/commit/df4ac84bef
* Add assertion for embedded to embedded ivar copyJemma Issroff2022-06-101-0/+1
|
* Add tests for a variety of string-subclass operations (#5999)Noah Gibbs2022-06-102-7/+77
| | | | This way YJIT has to match CRuby for each of them. Remove unused string_p() Rust function
* * 2022-06-11 [ci skip]git2022-06-111-1/+1
|
* Don't return a value from jit_guard_known_klass. We never return anything ↵Noah Gibbs2022-06-101-38/+27
| | | | but true at this point and we don't usually check the returned value. (#6000)
* small fix on `setup_debug_log()`Koichi Sasada2022-06-101-30/+38
| | | | | * print `ruby_debug_log_mode` at first. * show filters when `ruby_debug_log_mode` is not "disabled".
* Remove duplicated rb_yjit_get_stats (#5997)Eileen M. Uchitelle2022-06-101-1/+0
| | | | `rb_yjit_get_stats` is defined twice in yjit.c, it only needs to be defined once.
* Fix nested bmethod TracePoint and memory leakAlan Wu2022-06-103-2/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | df317151a5b4e0c5a30fcc321a9dc6abad63f7ed removed the code to free rb_hook_list_t, so repeated targeting of the same bmethod started to leak the hook list. You can observe how the maximum memory use scales with input size in the following script with `/usr/bin/time -v`. ```ruby o = Object.new o.define_singleton_method(:foo) {} trace = TracePoint.new(:return) {} bmethod = o.method(:foo) ARGV.first.to_i.times { trace.enable(target:bmethod){} } 4.times {GC.start} ``` After this change the maximum doesn't grow as quickly. To plug the leak, check whether the hook list is already allocated when enabling the targeting TracePoint for the bmethod. This fix also allows multiple TracePoints to target the same bmethod, similar to other valid TracePoint targets. Finally, free the rb_hook_list_t struct when freeing the method definition it lives on. Freeing in the GC is a good way to avoid lifetime problems similar to the one fixed in df31715. [Bug #18031]
* Remove a leftover requireTakashi Kokubun2022-06-091-1/+0
| | | | | I thought about using it in 2931957d6ff16b5c095f6e8095384c98130133ad once and then ended up not using it.
* Fix exit locations test (#5995)Eileen M. Uchitelle2022-06-091-3/+12
| | | | | | | | | | | | | | | | | I originally added the check for RubyVM::YJIT.trace_exit_locations_enabled? to fix errors when these tests run without the stats feature enabled. However I forgot that this will never be true when this test is booting, so nothing was running when the stats feature is turned on. Instead I've decided to make a new hash in the dump file and check if exit locations are enabled there. If they aren't enabled we return early to avoid checking for keys that won't exit in the dumped exit locations. I chose to add this additional enabled check because empty exit locations might not indicate that stats isn't enabled, it could mean the feature is entirely broken. I do want these tests to fail if stats are on and nothing was collected. Followup to #5970
* [ruby/fileutils] Enhanced RDoc (https://github.com/ruby/fileutils/pull/82)Burdette Lamar2022-06-101-34/+79
| | | | | | Treats ::chmod; adds Pathname usage to ::install. https://github.com/ruby/fileutils/commit/9db4cb129c
* [DOC] Fix markup for `String` (#5984)Alexander Ilyin2022-06-093-5/+5
| | | | | | * Add missing space for `String#start_with?`. * Add missing pluses for `String#tr` and `Methods for Converting to New String` label. * Move quote into the tag for `Whitespace in Strings` label.
* Add ability to trace exit locations in yjit (#5970)Eileen M. Uchitelle2022-06-0910-0/+557
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When running with `--yjit-stats` turned on, yjit can inform the user what the most common exits are. While this is useful information it doesn't tell you the source location of the code that exited or what the code that exited looks like. This change intends to fix that. To use the feature, run yjit with the `--yjit-trace-exits` option, which will record the backtrace for every exit that occurs. This functionality requires the stats feature to be turned on. Calling `--yjit-trace-exits` will automatically set the `--yjit-stats` option. Users must call `RubyVM::YJIT.dump_exit_locations(filename)` which will Marshal dump the contents of `RubyVM::YJIT.exit_locations` into a file based on the passed filename. *Example usage:* Given the following script, we write to a file called `concat_array.dump` the results of `RubyVM::YJIT.exit_locations`. ```ruby def concat_array ["t", "r", *x = "u", "e"].join end 1000.times do concat_array end RubyVM::YJIT.dump_exit_locations("concat_array.dump") ``` When we run the file with this branch and the appropriate flags the stacktrace will be recorded. Note Stackprof needs to be installed or you need to point to the library directly. ``` ./ruby --yjit --yjit-call-threshold=1 --yjit-trace-exits -I/Users/eileencodes/open_source/stackprof/lib test.rb ``` We can then read the dump file with Stackprof: ``` ./ruby -I/Users/eileencodes/open_source/stackprof/lib/ /Users/eileencodes/open_source/stackprof/bin/stackprof --text concat_array.dump ``` Results will look similar to the following: ``` ================================== Mode: () Samples: 1817 (0.00% miss rate) GC: 0 (0.00%) ================================== TOTAL (pct) SAMPLES (pct) FRAME 1001 (55.1%) 1001 (55.1%) concatarray 335 (18.4%) 335 (18.4%) invokeblock 178 (9.8%) 178 (9.8%) send 140 (7.7%) 140 (7.7%) opt_getinlinecache ...etc... ``` Simply inspecting the `concatarray` method will give `SOURCE UNAVAILABLE` because the source is insns.def. ``` ./ruby -I/Users/eileencodes/open_source/stackprof/lib/ /Users/eileencodes/open_source/stackprof/bin/stackprof --text concat_array.dump --method concatarray ``` Result: ``` concatarray (nonexistent.def:1) samples: 1001 self (55.1%) / 1001 total (55.1%) callers: 1000 ( 99.9%) Object#concat_array 1 ( 0.1%) Gem.suffixes callees (0 total): code: SOURCE UNAVAILABLE ``` However if we go deeper to the callee we can see the exact source of the `concatarray` exit. ``` ./ruby -I/Users/eileencodes/open_source/stackprof/lib/ /Users/eileencodes/open_source/stackprof/bin/stackprof --text concat_array.dump --method Object#concat_array ``` ``` Object#concat_array (/Users/eileencodes/open_source/rust_ruby/test.rb:1) samples: 0 self (0.0%) / 1000 total (55.0%) callers: 1000 ( 100.0%) block in <main> callees (1000 total): 1000 ( 100.0%) concatarray code: | 1 | def concat_array 1000 (55.0%) | 2 | ["t", "r", *x = "u", "e"].join | 3 | end ``` The `--walk` option is recommended for this feature as it make it easier to traverse the tree of exits. *Goals of this feature:* This feature is meant to give more information when working on YJIT. The idea is that if we know what code is exiting we can decide what areas to prioritize when fixing exits. In some cases this means adding prioritizing avoiding certain exits in yjit. In more complex cases it might mean changing the Ruby code to be more performant when run with yjit. Ultimately the more information we have about what code is exiting AND why, the better we can make yjit. *Known limitations:* * Due to tracing exits, running this on large codebases like Rails can be quite slow. * On complex methods it can still be difficult to pinpoint the exact cause of an exit. * Stackprof is a requirement to to view the backtrace information from the dump file. Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org> Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
* * 2022-06-10 [ci skip]git2022-06-101-1/+1
|
* Stop ignoring 4th positional argument to IO.#{foreach,readlines}Jeremy Evans2022-06-092-2/+5
| | | | Fixes [Bug #18771]
* Skip `NULL` values from `dladdr(3)`xtkoba2022-06-091-5/+7
| | | Fixes [Bug #17810]
* [ruby/timeout] Keep a private reference to `Process.clock_gettime`Jean Boussier2022-06-091-2/+8
| | | | | | | | | | `timeout 0.3.0` broke our test suite because we have some tests that stubs `Process.clock_gettime` making it return a value in the past, causing `Timeout` to trigger almost immediately. I beleive it wasn't a problem before because it was relying on `Process.sleep`. https://github.com/ruby/timeout/commit/e5911a303e
* doc/case_mapping.rdoc: Fix references for case mappingYusuke Endoh2022-06-091-2/+2
| | | | | | | | The chart (https://www.unicode.org/charts/case) that is currently referred seems to be wrong. Also, use the "latest" redirect and add titles of the section and table. [Bug #18590]
* Fix MJIT's ISEQ_BODY macro usage at 5f10bd634fbTakashi Kokubun2022-06-082-1/+11
|
* MJIT: Ignore existence of .bundle.dSYM on macOSTakashi Kokubun2022-06-081-4/+16
| | | | | | | We could fix it, but removing files in the directory recursively is tedious in C and --mjit-debug is not a concern for users. We have TestMJITDebug for detecting linker problems that are ignored by -O. It's not really for maintaining --mjit-debug itself.
* Fix compile errorKazuhiro NISHIYAMA2022-06-091-5/+5
| | | | | | | | | | | | | | ``` compiling ../debug.c ../debug.c:452:1: error: conflicting types for 'ruby_debug_log_filter' ruby_debug_log_filter(const char *func_name, const char *file_name) ^ ../vm_debug.h:87:6: note: previous declaration is here bool ruby_debug_log_filter(const char *func_name); ^ 1 error generated. make: *** [debug.o] Error 1 ```
* [ruby/fileutils] [DOC] Enhanced RDoc (https://github.com/ruby/fileutils/pull/81)Burdette Lamar2022-06-091-22/+76
| | | | https://github.com/ruby/fileutils/commit/b9d5a79e38
* MJIT: Directly compile .c to .so (#5987)Takashi Kokubun2022-06-081-3/+28
| | | I'm planning to redesign the MJIT worker pipeline, and this allows you to simplify the implementation and let it run efficiently except for MinGW.
* func: and file: prefix for `RUBY_DEBUG_LOG_FILTER`Koichi Sasada2022-06-091-45/+121
| | | | | | | | | | | | | | | | | | | | `RUBY_DEBUG_LOG_FILTER` specified only function names but this patch also check file names for each log events. If you specify `file:` or `func:` prefix, it's only filter file names or func names (otherwize check both). foo # show log when file or func names are mached with foo func:foo # show log when func name matches foo file:foo # show log when file name matches foo -file:foo,func:bar # show log when file name does not contains foo # and func name matches bar
* Fix major GC thrashingPeter Zhu2022-06-081-3/+5
| | | | | | | | | | | | | | Only growth heaps are allowed to start major GCs. Before this patch, growth heaps are defined as size pools that freed more slots than had empty slots (i.e. there were more dead objects that empty space). But if the size pool is relatively stable and tightly packed with mostly old objects and has allocatable pages, then it would be incorrectly classified as a growth heap and trigger major GC. But since it's stable, it would not use any of the allocatable pages and forever be classified as a growth heap, causing major GC thrashing. This commit changes the definition of growth heap to require that the size pool to have no allocatable pages.
* * 2022-06-09 [ci skip]git2022-06-091-1/+1
|
* Fix compilation error when USE_RVARGC=0Peter Zhu2022-06-081-3/+1
| | | | force_major_gc_count was not defined when USE_RVARGC=0.
* Add key force_major_gc_count to GC.stat_heapPeter Zhu2022-06-082-0/+4
| | | | | force_major_gc_count is the number of times the size pool forced major GC to run.
* [ruby/fileutils] File trees (https://github.com/ruby/fileutils/pull/80)Burdette Lamar2022-06-081-7/+39
| | | | | | Adds a note about file tree examples. https://github.com/ruby/fileutils/commit/65ac65067a
* Update "Reporting Issues" link in the READMEAlexander Ilyin2022-06-081-1/+1
| | | | This link is broken.
* Update the help message on /benchmarkTakashi Kokubun2022-06-072-4/+6
| | | | I wanted to point out there's --output=all.
* [DOC] RDoc now accepts other than magic numbers at `rb_attr`Nobuyoshi Nakada2022-06-081-1/+1
|
* Remove duplicated prototype in header filePeter Zhu2022-06-071-1/+0
| | | | rb_imemo_new is defined again later in the file.
* thread_pthread.c: trigger THREAD_EVENT_READY when going throuhg the fast path.Jean Boussier2022-06-071-4/+4
|
* * 2022-06-08 [ci skip]git2022-06-081-1/+1
|
* Add special-case code for the String unary plus operator (#5982)Noah Gibbs2022-06-074-0/+69
|
* [rubygems/rubygems] Remove unnecessary string concatenationDaniel Berger2022-06-071-3/+2
| | | | https://github.com/rubygems/rubygems/commit/81ccb3ab89
* Remove while loop over heap_preparePeter Zhu2022-06-071-8/+52
| | | | | | | Having a while loop over `heap_prepare` makes the GC logic difficult to understand (it is difficult to understand when and why `heap_prepare` yields a free page). It is also a source of bugs and can cause an infinite loop if `heap_page` never yields a free page.
* [rubygems/rubygems] Relax performance spec limitDavid Rodríguez2022-06-071-1/+1
| | | | https://github.com/rubygems/rubygems/commit/eab417d0ce
* Refactor TestThreadInstrumentation to investigate CI flakinessJean Boussier2022-06-071-10/+24
| | | | | | | | | | `test_thread_instrumentation_fork_safe` has been failing occasionaly on Ubuntu and Arch. At this stage we're not sure why, all we know is that the child exit with status 1. I suspect that something entirely unrelated cause the forked children to fail on exit, so by using `exit!(0)` and doing assertions in the parent I hope to be resilient to that.
* [ruby/error_highlight] Use Exception#detailed_message instead of overriding ↵Yusuke Endoh2022-06-072-17/+43
| | | | | | | | | #message (https://github.com/ruby/error_highlight/pull/24) See https://bugs.ruby-lang.org/issues/18564. Ref: https://github.com/ruby/did_you_mean/pull/177 https://github.com/ruby/error_highlight/commit/671b7c61b2
* Manually merged https://github.com/ruby/did_you_mean/pull/177Hiroshi SHIBATA2022-06-079-57/+98
|
* Revert "error.c: Let Exception#inspect inspect its message"Yusuke Endoh2022-06-074-18/+3
| | | | This reverts commit 9d927204e7b86eb00bfd07a060a6383139edf741.
* [ruby/rdoc] [DOC] Undocument internal constants [ci skip]Nobuyoshi Nakada2022-06-071-2/+2
| | | | https://github.com/ruby/rdoc/commit/6d7bf24bb8
* error.c: Let Exception#inspect inspect its messageYusuke Endoh2022-06-074-3/+18
| | | | | | | | | | | | ... only when the message string has a newline. `p StandardError.new("foo\nbar")` now prints `#<StandardError: "foo\nbar">' instead of: #<StandardError: bar> [Bug #18170]
* [ruby/rdoc] Allow boolean arguments to `rb_attr` and `rb_define_attr`Nobuyoshi Nakada2022-06-072-78/+32
| | | | | | | | | | Currently only literal `0` and `1` are accepted as `read`/`write` flags. This patch allows other boolean arguments, C macros (`FALSE`/`TRUE`), Ruby `VALUE`s (`Qfalse`/`Qtrue`), and C99 `bool`s (`false`/`true`), as well. https://github.com/ruby/rdoc/commit/169dc02e3c
* .github/workflows/compilers.yml: annocheck: Fix a linker flag to pass MJIT ↵Jun Aruga2022-06-071-8/+2
| | | | | | | | | | tests. Set the linker flag `-Wl,-z,now` properly. Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com> Fixes [Bug #18781]
* Ignore invalid escapes in regexp commentsJeremy Evans2022-06-063-19/+131
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Invalid escapes are handled at multiple levels. The first level is in parse.y, so skip invalid unicode escape checks for regexps in parse.y. Make rb_reg_preprocess and unescape_nonascii accept the regexp options. In unescape_nonascii, if the regexp is an extended regexp, when "#" is encountered, ignore all characters until the end of line or end of regexp. Unfortunately, in extended regexps, you can use "#" as a non-comment character inside a character class, so also parse "[" and "]" specially for extended regexps, and only skip comments if "#" is not inside a character class. Handle nested character classes as well. This issue doesn't just affect extended regexps, it also affects "(#?" comments inside all regexps. So for those comments, scan until trailing ")" and ignore content inside. I'm not sure if there are other corner cases not handled. A better fix would be to redesign the regexp parser so that it unescaped during parsing instead of before parsing, so you already know the current parsing state. Fixes [Bug #18294] Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
* Fix Module#const_source_location for autoload constants with direct requiresJeremy Evans2022-06-062-2/+22
| | | | | | | | | | If an autoload exists for a constant, but the path for the autoload was required, const_source_location would return [false, 0] instead of the actual file and line. This fixes it by setting the appropriate file and line in rb_const_set, and saving the file and line in const_tbl_update before they get reset by current_autoload_data. Fixes [Bug #18624]
* Use bindgen to import Ruby constants wherever possible. (#5943)Noah Gibbs2022-06-065-60/+93
| | | | Constants that can't be imported via bindgen should have a comment saying why not.