Bump necojackarc/auto-request-review from 0.7.0 to 0.8.0#1
Closed
dependabot[bot] wants to merge 1 commit into
Closed
Bump necojackarc/auto-request-review from 0.7.0 to 0.8.0#1dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps [necojackarc/auto-request-review](https://github.com/necojackarc/auto-request-review) from 0.7.0 to 0.8.0. - [Release notes](https://github.com/necojackarc/auto-request-review/releases) - [Commits](necojackarc/auto-request-review@e08cdff...b5e8187) --- updated-dependencies: - dependency-name: necojackarc/auto-request-review dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
shugo
pushed a commit
that referenced
this pull request
Nov 16, 2022
shugo
pushed a commit
that referenced
this pull request
Nov 16, 2022
Always look up instance variable buffers when iterating. It is possible for the instance variable buffer to change out from under the object during iteration, so we cannot cache the buffer on the stack. In the case of Bug #19095, the transient heap moved the buffer during iteration: ``` Watchpoint 1 hit: old value: 0x0000000107c00df8 new value: 0x00000001032743c0 Process 31720 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = watchpoint 1 frame #0: 0x00000001006e5178 miniruby`rb_obj_transient_heap_evacuate(obj=0x000000010d6b94b0, promote=1) at variable.c:1361:5 1358 } 1359 MEMCPY(new_ptr, old_ptr, VALUE, len); 1360 ROBJECT(obj)->as.heap.ivptr = new_ptr; -> 1361 } 1362 } 1363 #endif 1364 miniruby`rb_obj_transient_heap_evacuate: -> 0x1006e5178 <+328>: b 0x1006e517c ; <+332> at variable.c:1362:1 0x1006e517c <+332>: ldp x29, x30, [sp, #0x50] 0x1006e5180 <+336>: add sp, sp, #0x60 0x1006e5184 <+340>: ret Target 0: (miniruby) stopped. (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = watchpoint 1 * frame #0: 0x00000001006e5178 miniruby`rb_obj_transient_heap_evacuate(obj=0x000000010d6b94b0, promote=1) at variable.c:1361:5 frame #1: 0x00000001006cb150 miniruby`transient_heap_block_evacuate(theap=0x0000000100b196c0, block=0x0000000107c00000) at transient_heap.c:734:17 frame #2: 0x00000001006c854c miniruby`transient_heap_evacuate(dmy=0x0000000000000000) at transient_heap.c:808:17 frame #3: 0x00000001007fe6c0 miniruby`rb_postponed_job_flush(vm=0x0000000104402900) at vm_trace.c:1773:21 frame #4: 0x0000000100637a84 miniruby`rb_threadptr_execute_interrupts(th=0x0000000103803bc0, blocking_timing=0) at thread.c:2316:13 frame #5: 0x000000010078b730 miniruby`rb_vm_check_ints(ec=0x00000001048038d0) at vm_core.h:2025:9 frame #6: 0x00000001006fbd10 miniruby`vm_pop_frame(ec=0x00000001048038d0, cfp=0x0000000104a04440, ep=0x0000000104904a28) at vm_insnhelper.c:422:5 frame #7: 0x00000001006fbca0 miniruby`rb_vm_pop_frame(ec=0x00000001048038d0) at vm_insnhelper.c:431:5 frame #8: 0x00000001007d6420 miniruby`vm_call0_cfunc_with_frame(ec=0x00000001048038d0, calling=0x000000016fdcc6a0, argv=0x0000000000000000) at vm_eval.c:153:9 frame #9: 0x00000001007d44cc miniruby`vm_call0_cfunc(ec=0x00000001048038d0, calling=0x000000016fdcc6a0, argv=0x0000000000000000) at vm_eval.c:164:12 frame #10: 0x0000000100766e80 miniruby`vm_call0_body(ec=0x00000001048038d0, calling=0x000000016fdcc6a0, argv=0x0000000000000000) at vm_eval.c:210:15 frame #11: 0x00000001007d76f0 miniruby`vm_call0_cc(ec=0x00000001048038d0, recv=0x000000010d6b49d8, id=2769, argc=0, argv=0x0000000000000000, cc=0x000000010d6b2e58, kw_splat=0) at vm_eval.c:87:12 frame #12: 0x0000000100769e48 miniruby`rb_funcallv_scope(recv=0x000000010d6b49d8, mid=2769, argc=0, argv=0x0000000000000000, scope=CALL_FCALL) at vm_eval.c:1051:16 frame #13: 0x0000000100760a54 miniruby`rb_funcallv(recv=0x000000010d6b49d8, mid=2769, argc=0, argv=0x0000000000000000) at vm_eval.c:1066:12 frame #14: 0x000000010037513c miniruby`rb_inspect(obj=0x000000010d6b49d8) at object.c:633:34 frame #15: 0x000000010002c950 miniruby`inspect_ary(ary=0x000000010d6b4938, dummy=0x0000000000000000, recur=0) at array.c:3091:13 frame #16: 0x0000000100642020 miniruby`exec_recursive(func=(miniruby`inspect_ary at array.c:3084), obj=0x000000010d6b4938, pairid=0x0000000000000000, arg=0x0000000000000000, outer=0, mid=2769) at thread.c:5177:23 frame #17: 0x00000001006412fc miniruby`rb_exec_recursive(func=(miniruby`inspect_ary at array.c:3084), obj=0x000000010d6b4938, arg=0x0000000000000000) at thread.c:5205:12 frame #18: 0x00000001000127f0 miniruby`rb_ary_inspect(ary=0x000000010d6b4938) at array.c:3117:12 ``` In general though, any calls back out to the interpreter could change the IV buffer, so it's not safe to cache. [Bug #19095]
Author
|
Looks like necojackarc/auto-request-review is up-to-date now, so this is no longer needed. |
shugo
pushed a commit
that referenced
this pull request
Jul 16, 2024
When Ruby is built with ASAN and RUBY_FREE_AT_EXIT is enabled, the
following error occurs:
READ of size 8 at 0x74c666610020 thread T0
#0 0x593b6712ecc6 in RB_BUILTIN_TYPE include/ruby/internal/value_type.h:191:30
#1 0x593b6712ecc6 in rb_gc_impl_shutdown_free_objects gc_impl.c:3208:17
#2 0x593b6749a62e in ruby_vm_destruct vm.c:3133:17
shugo
pushed a commit
that referenced
this pull request
May 14, 2026
pm_parse_process initializes the index_lookup_table but nothing seems to
use it after it has been allocated. However, pm_compile_scope_node will
overwrite the index_lookup_table and cause it to leak memory. This can
be seen during bootup with the following memory leaks reported by ASAN:
#0 0x60dba31b7af3 in malloc
#1 0x60dba32e0718 in rb_gc_impl_malloc gc/default/default.c:8287:5
#2 0x60dba32c7aa7 in ruby_xmalloc_body gc.c:5373:12
#3 0x60dba32c4a54 in ruby_xmalloc gc.c:5355:34
#4 0x60dba3260314 in pm_index_lookup_table_init_heap prism_compile.h:89:29
#5 0x60dba3209388 in pm_parse_process prism_compile.c:11366:5
shugo
pushed a commit
that referenced
this pull request
Jun 16, 2026
* ZJIT: Use shape id as cache key for object layout Since ruby#17158, we can use the shape id as our cache key for determining object layout. This patch changes ZJIT to use shape id instead of testing all bits. Given this program: ```ruby class Foo def initialize; @bar = 123; end def read; @bar; end def add; @baz = 123; end end foo = Foo.new 3.times { foo = Foo.new foo.read foo.add foo.read } ``` We end up with a polymorphic read in the `read` method. On master, the HIR looks like this: ``` Optimized HIR: fn read@../test.rb:9: bb1(): EntryPoint interpreter v1:HeapBasicObject = LoadSelf Jump bb3(v1) bb2(): EntryPoint JIT(0) v4:HeapBasicObject = LoadArg :self@0 Jump bb3(v4) bb3(v6:HeapBasicObject): PatchPoint SingleRactorMode v12:CUInt64 = LoadField v6, :RBASIC_FLAGS@0x0 v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f) v15:CPtr[CPtr(0x8000800000001)] = Const CPtr(0x8000800000001) v16 = RefineType v15, CUInt64 v17:CInt64 = IntAnd v12, v14 v18:CBool = IsBitEqual v17, v16 CondBranch v18, bb5(), bb6() bb5(): v20:BasicObject = LoadField v6, :@bar@0x10 Jump bb4(v20) bb6(): v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f) v23:CPtr[CPtr(0x8000900000001)] = Const CPtr(0x8000900000001) v24 = RefineType v23, CUInt64 v25:CInt64 = IntAnd v12, v22 v26:CBool = IsBitEqual v25, v24 CondBranch v26, bb7(), bb8() bb7(): v28:BasicObject = LoadField v6, :@bar@0x10 Jump bb4(v28) bb8(): v30:BasicObject = GetIvar v6, :@bar Jump bb4(v30) bb4(v13:BasicObject): CheckInterrupts Return v13 ``` On this branch, the HIR is like this: ``` Optimized HIR: fn read@../test.rb:9: bb1(): EntryPoint interpreter v1:HeapBasicObject = LoadSelf Jump bb3(v1) bb2(): EntryPoint JIT(0) v4:HeapBasicObject = LoadArg :self@0 Jump bb3(v4) bb3(v6:HeapBasicObject): PatchPoint SingleRactorMode v13:CShape = LoadField v6, :shape_id@0x4 v14:CShape[0x80008] = Const CShape(0x80008) v15:CBool = IsBitEqual v14, v13 CondBranch v15, bb5(), bb6() bb5(): v17:BasicObject = LoadField v6, :@bar@0x10 Jump bb4(v17) bb6(): v19:CShape = LoadField v6, :shape_id@0x4 v20:CShape[0x80009] = Const CShape(0x80009) v21:CBool = IsBitEqual v20, v19 CondBranch v21, bb7(), bb8() bb7(): v23:BasicObject = LoadField v6, :@bar@0x10 Jump bb4(v23) bb8(): v25:BasicObject = GetIvar v6, :@bar Jump bb4(v25) bb4(v12:BasicObject): CheckInterrupts Return v12 ``` We're able to avoid loading all of the flags, applying a mask, and the testing. The machine code for bb3 looks like this on master (I've removed the nop buffers for patch points): ``` # Insn: v12 LoadField v6, :RBASIC_FLAGS@0x0 # Load field id=RBASIC_FLAGS offset=0 0x122c50124: ldur x1, [x0] # Insn: v14 Const CUInt64(0xffffffff0000001f) # Insn: v15 Const CPtr(0x8000800000001) # Insn: v16 RefineType v15, CUInt64 # Insn: v17 IntAnd v12, v14 0x122c50128: and x2, x1, #0xffffffff0000001f # Insn: v18 IsBitEqual v17, v16 0x122c5012c: mov x3, #1 0x122c50130: movk x3, #0, lsl #16 0x122c50134: movk x3, #8, lsl #32 0x122c50138: movk x3, #8, lsl #48 0x122c5013c: cmp x2, x3 0x122c50140: mov x2, #1 0x122c50144: mov x3, #0 0x122c50148: csel x2, x2, x3, eq 0x122c5014c: tst x2, x2 0x122c50150: b.ne #0x122c501e8 ``` On this branch it looks like this: ``` # Insn: v13 LoadField v6, :shape_id@0x4 # Load field id=shape_id offset=4 0x124dd0124: ldur w1, [x0, #4] # Insn: v14 Const CShape(0x80008) # Insn: v15 IsBitEqual v14, v13 0x124dd0128: mov x2, #8 0x124dd012c: movk x2, #8, lsl #16 0x124dd0130: cmp x2, x1 0x124dd0134: mov x1, #1 0x124dd0138: mov x2, #0 0x124dd013c: csel x1, x1, x2, eq 0x124dd0140: tst x1, x1 0x124dd0144: b.ne #0x124dd01d4 ``` We've eliminated the `and` instruction and only need to do a 32 bit load for the shape. * fix operand order * Remove comments and whitespace * remove stuttering * fix variable name to be more clear * Keep assert * update snapshots
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps necojackarc/auto-request-review from 0.7.0 to 0.8.0.
Release notes
Sourced from necojackarc/auto-request-review's releases.
Commits
b5e8187Bump to v0.8.0 (#73)d849aadBump to node.js 16 (#72)b60d462Bump@actions/corefrom 1.2.6 to 1.9.1 (#69)b219e62Fix example for using group assignment (#67)b2ffadbBump minimist from 1.2.5 to 1.2.6 (#62)ec75979Bump ansi-regex from 5.0.0 to 5.0.1 (#61)3e63137Update devDependencies to the latest (#60)b7b5f3fBump node-fetch from 2.6.1 to 2.6.7 (#59)2e53543Bump pathval from 1.1.0 to 1.1.1 (#58)91e252dchore: correct important typo (#54)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)