Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
193 changes: 193 additions & 0 deletions .github/workflows/ubuntu-ibm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
name: Ubuntu IBM
on:
push:
paths-ignore:
- 'doc/**'
- '**/man/*'
- '**.md'
- '**.rdoc'
- '**/.document'
- '.*.yml'
pull_request:
# Do not use paths-ignore for required status checks
# https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
merge_group:

concurrency:
group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}

permissions:
contents: read

jobs:
make:
strategy:
matrix:
test_task: [check]
configure: ['']
arch: ['']
os:
# FIXME Comment out ppc64le due to failing tests on GitHub Actions
# ppc64le
# https://bugs.ruby-lang.org/issues/21534
# - ubuntu-24.04-ppc64le
- ubuntu-24.04-s390x
# The ppc64le/s390x runners work only in the registered repositories.
# They don't work in forked repositories.
# https://github.com/IBM/actionspz/blob/main/docs/FAQ.md#what-about-forked-repos
upstream:
- ${{ github.repository == 'ruby/ruby' }}
exclude:
- os: ubuntu-24.04-ppc64le
upstream: false
- os: ubuntu-24.04-s390x
upstream: false
fail-fast: false

env:
GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
RUBY_DEBUG: ci

runs-on: ${{ matrix.os || 'ubuntu-22.04' }}

if: >-
${{!(false
|| contains(github.event.head_commit.message, '[DOC]')
|| contains(github.event.pull_request.title, '[DOC]')
|| contains(github.event.pull_request.labels.*.name, 'Documentation')
|| (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
)}}

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
sparse-checkout-cone-mode: false
sparse-checkout: /.github

- uses: ./.github/actions/setup/ubuntu
with:
arch: ${{ matrix.arch }}

- uses: ruby/setup-ruby@a9bfc2ecf3dd40734a9418f89a7e9d484c32b990 # v1.248.0
with:
ruby-version: '3.1'
bundler: none
if: ${{ !endsWith(matrix.os, 'arm') && !endsWith(matrix.os, 'ppc64le') && !endsWith(matrix.os, 's390x') }}

# Avoid possible test failures with the zlib applying the following patch
# on s390x CPU architecture.
# https://github.com/madler/zlib/pull/410
- name: Disable DFLTCC
run: echo "DFLTCC=0" >> $GITHUB_ENV
working-directory:
if: ${{ endsWith(matrix.os, 's390x') }}

# A temporary workaround: Set HOME env to pass the step
# ./.github/actions/setup/directories.
# https://github.com/IBM/actionspz/issues/30
- name: Set HOME env
run: |
echo "HOME: #{HOME}"
echo "HOME=$(ls -d ~)" >> $GITHUB_ENV
working-directory:
if: ${{ endsWith(matrix.os, 'ppc64le') || endsWith(matrix.os, 's390x') }}

- uses: ./.github/actions/setup/directories
with:
srcdir: src
builddir: build
makeup: true
clean: true
dummy-files: ${{ matrix.test_task == 'check' }}
# Set fetch-depth: 10 so that Launchable can receive commits information.
fetch-depth: 10

- name: Run configure
env:
arch: ${{ matrix.arch }}
configure: ${{ matrix.configure }}
run: >-
$SETARCH ../src/configure -C --disable-install-doc ${configure:-cppflags=-DRUBY_DEBUG}
${arch:+--target=$arch-$OSTYPE --host=$arch-$OSTYPE}

- run: $SETARCH make prepare-gems
if: ${{ matrix.test_task == 'test-bundled-gems' }}

- run: $SETARCH make

- run: $SETARCH make hello

- name: runirb
run: |
echo IRB::VERSION | $SETARCH make runirb RUNOPT="-- -f"

- name: Set test options for skipped tests
run: |
set -x
TESTS="$(echo "${{ matrix.skipped_tests }}" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|')"
echo "TESTS=${TESTS}" >> $GITHUB_ENV
if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}

- name: Set up Launchable
id: launchable
uses: ./.github/actions/launchable/setup
with:
os: ${{ matrix.os || 'ubuntu-22.04' }}
test-opts: ${{ matrix.configure }}
launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
builddir: build
srcdir: src
continue-on-error: true
timeout-minutes: 3

# A temporary workaround: Skip user ground id test
# There is a mismatch between the group IDs of "id -g" and C function
# getpwuid(uid_t uid) pw_gid.
# https://github.com/IBM/actionspz/issues/31
- name: Skip user group id test
run: |
sed -i.orig '/^ it "returns user group id" do/a\ skip' \
../src/spec/ruby/library/etc/struct_passwd_spec.rb
diff -u ../src/spec/ruby/library/etc/struct_passwd_spec.rb{.orig,} || :
if: ${{ endsWith(matrix.os, 'ppc64le') || endsWith(matrix.os, 's390x') }}

- name: make ${{ matrix.test_task }}
run: |
test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")

$SETARCH make -s ${{ matrix.test_task }} \
${TESTS:+TESTS="$TESTS"} \
${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }}
timeout-minutes: ${{ matrix.timeout || 40 }}
env:
RUBY_TESTOPTS: '-q --tty=no'
TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
PRECHECK_BUNDLED_GEMS: 'no'
LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}

- name: make skipped tests
run: |
$SETARCH make -s test-all TESTS="${TESTS//-n!\//-n/}"
env:
GNUMAKEFLAGS: ''
RUBY_TESTOPTS: '-v --tty=no'
if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}

- name: test-pc
run: |
DESTDIR=${RUNNER_TEMP-${TMPDIR-/tmp}}/installed
$SETARCH make test-pc "DESTDIR=$DESTDIR"

- uses: ./.github/actions/slack
with:
label: ${{ matrix.test_task }} ${{ matrix.configure }}${{ matrix.arch }}
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
if: ${{ failure() }}

defaults:
run:
working-directory: build
57 changes: 6 additions & 51 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,7 @@ jobs:
make:
strategy:
matrix:
test_task: [check]
configure: ['']
arch: ['']
os:
- ubuntu-24.04
- ubuntu-24.04-arm
# FIXME Comment out ppc64le due to failing tests on GitHub Actions
# ppc64le
# https://bugs.ruby-lang.org/issues/21534
# - ubuntu-24.04-ppc64le
- ubuntu-24.04-s390x
# The ppc64le/s390x runners work only in the registered repositories.
# They don't work in forked repositories.
# https://github.com/IBM/actionspz/blob/main/docs/FAQ.md#what-about-forked-repos
upstream:
- ${{ github.repository == 'ruby/ruby' }}
# We enumerate every job in matrix.include to save build time
include:
- test_task: check
configure: 'cppflags=-DVM_CHECK_MODE'
Expand All @@ -52,11 +37,10 @@ jobs:
- test_task: test-bundler-parallel
timeout: 50
- test_task: test-bundled-gems
exclude:
- os: ubuntu-24.04-ppc64le
upstream: false
- os: ubuntu-24.04-s390x
upstream: false
- test_task: check
os: ubuntu-24.04
- test_task: check
os: ubuntu-24.04-arm
fail-fast: false

env:
Expand Down Expand Up @@ -87,25 +71,7 @@ jobs:
with:
ruby-version: '3.1'
bundler: none
if: ${{ !endsWith(matrix.os, 'arm') && !endsWith(matrix.os, 'ppc64le') && !endsWith(matrix.os, 's390x') }}

# Avoid possible test failures with the zlib applying the following patch
# on s390x CPU architecture.
# https://github.com/madler/zlib/pull/410
- name: Disable DFLTCC
run: echo "DFLTCC=0" >> $GITHUB_ENV
working-directory:
if: ${{ endsWith(matrix.os, 's390x') }}

# A temporary workaround: Set HOME env to pass the step
# ./.github/actions/setup/directories.
# https://github.com/IBM/actionspz/issues/30
- name: Set HOME env
run: |
echo "HOME: #{HOME}"
echo "HOME=$(ls -d ~)" >> $GITHUB_ENV
working-directory:
if: ${{ endsWith(matrix.os, 'ppc64le') || endsWith(matrix.os, 's390x') }}
if: ${{ !endsWith(matrix.os, 'arm') }}

- uses: ./.github/actions/setup/directories
with:
Expand Down Expand Up @@ -155,17 +121,6 @@ jobs:
continue-on-error: true
timeout-minutes: 3

# A temporary workaround: Skip user ground id test
# There is a mismatch between the group IDs of "id -g" and C function
# getpwuid(uid_t uid) pw_gid.
# https://github.com/IBM/actionspz/issues/31
- name: Skip user group id test
run: |
sed -i.orig '/^ it "returns user group id" do/a\ skip' \
../src/spec/ruby/library/etc/struct_passwd_spec.rb
diff -u ../src/spec/ruby/library/etc/struct_passwd_spec.rb{.orig,} || :
if: ${{ endsWith(matrix.os, 'ppc64le') || endsWith(matrix.os, 's390x') }}

- name: make ${{ matrix.test_task }}
run: |
test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
Expand Down
5 changes: 0 additions & 5 deletions bootstraptest/test_insns.rb
Original file line number Diff line number Diff line change
Expand Up @@ -426,11 +426,6 @@ class X; def x; {}; end; end
x&.x[true] ||= true # here
},

[ 'opt_aref_with', %q{ { 'true' => true }['true'] }, ],
[ 'opt_aref_with', %q{ Struct.new(:nil).new['nil'].nil? }, ],
[ 'opt_aset_with', %q{ {}['true'] = true }, ],
[ 'opt_aset_with', %q{ Struct.new(:true).new['true'] = true }, ],

[ 'opt_length', %q{ 'true' .length == 4 }, ],
[ 'opt_length', %q{ :true .length == 4 }, ],
[ 'opt_length', %q{ [ 'true' ] .length == 1 }, ],
Expand Down
2 changes: 1 addition & 1 deletion bootstraptest/test_yjit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1330,7 +1330,7 @@ def index(obj, idx)
]
}

# Test default value block for Hash with opt_aref_with
# Test default value block for Hash
assert_equal "false", <<~RUBY, frozen_string_literal: false
def index_with_string(h)
h["foo"]
Expand Down
46 changes: 0 additions & 46 deletions compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -3898,8 +3898,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal

if (do_tailcallopt &&
(IS_INSN_ID(iobj, send) ||
IS_INSN_ID(iobj, opt_aref_with) ||
IS_INSN_ID(iobj, opt_aset_with) ||
IS_INSN_ID(iobj, invokesuper))) {
/*
* send ...
Expand Down Expand Up @@ -8965,25 +8963,6 @@ compile_call_precheck_freeze(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE
}
return TRUE;
}
/* optimization shortcut
* obj["literal"] -> opt_aref_with(obj, "literal")
*/
if (get_node_call_nd_mid(node) == idAREF && !private_recv_p(node) && get_nd_args(node) &&
nd_type_p(get_nd_args(node), NODE_LIST) && RNODE_LIST(get_nd_args(node))->as.nd_alen == 1 &&
(nd_type_p(RNODE_LIST(get_nd_args(node))->nd_head, NODE_STR) || nd_type_p(RNODE_LIST(get_nd_args(node))->nd_head, NODE_FILE)) &&
ISEQ_COMPILE_DATA(iseq)->current_block == NULL &&
!frozen_string_literal_p(iseq) &&
ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) {
VALUE str = get_string_value(RNODE_LIST(get_nd_args(node))->nd_head);
CHECK(COMPILE(ret, "recv", get_nd_recv(node)));
ADD_INSN2(ret, line_node, opt_aref_with, str,
new_callinfo(iseq, idAREF, 1, 0, NULL, FALSE));
RB_OBJ_WRITTEN(iseq, Qundef, str);
if (popped) {
ADD_INSN(ret, line_node, pop);
}
return TRUE;
}
return FALSE;
}

Expand Down Expand Up @@ -10311,31 +10290,6 @@ compile_attrasgn(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node
LABEL *else_label = NULL;
VALUE branches = Qfalse;

/* optimization shortcut
* obj["literal"] = value -> opt_aset_with(obj, "literal", value)
*/
if (!ISEQ_COMPILE_DATA(iseq)->in_masgn &&
mid == idASET && !private_recv_p(node) && RNODE_ATTRASGN(node)->nd_args &&
nd_type_p(RNODE_ATTRASGN(node)->nd_args, NODE_LIST) && RNODE_LIST(RNODE_ATTRASGN(node)->nd_args)->as.nd_alen == 2 &&
(nd_type_p(RNODE_LIST(RNODE_ATTRASGN(node)->nd_args)->nd_head, NODE_STR) || nd_type_p(RNODE_LIST(RNODE_ATTRASGN(node)->nd_args)->nd_head, NODE_FILE)) &&
ISEQ_COMPILE_DATA(iseq)->current_block == NULL &&
!frozen_string_literal_p(iseq) &&
ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction)
{
VALUE str = get_string_value(RNODE_LIST(RNODE_ATTRASGN(node)->nd_args)->nd_head);
CHECK(COMPILE(ret, "recv", RNODE_ATTRASGN(node)->nd_recv));
CHECK(COMPILE(ret, "value", RNODE_LIST(RNODE_LIST(RNODE_ATTRASGN(node)->nd_args)->nd_next)->nd_head));
if (!popped) {
ADD_INSN(ret, node, swap);
ADD_INSN1(ret, node, topn, INT2FIX(1));
}
ADD_INSN2(ret, node, opt_aset_with, str,
new_callinfo(iseq, idASET, 2, 0, NULL, FALSE));
RB_OBJ_WRITTEN(iseq, Qundef, str);
ADD_INSN(ret, node, pop);
return COMPILE_OK;
}

INIT_ANCHOR(recv);
INIT_ANCHOR(args);
argc = setup_args(iseq, args, RNODE_ATTRASGN(node)->nd_args, &flag, NULL);
Expand Down
2 changes: 1 addition & 1 deletion gems/bundled_gems
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ net-pop 0.1.2 https://github.com/ruby/net-pop
net-smtp 0.5.1 https://github.com/ruby/net-smtp
matrix 0.4.3 https://github.com/ruby/matrix
prime 0.1.4 https://github.com/ruby/prime
rbs 3.9.4 https://github.com/ruby/rbs fba1f778b7eff01dde5e3d886e850f7eea018f2b
rbs 3.9.4 https://github.com/ruby/rbs 368bf4b1ab52a9335e2022618ac4545a4d9cacdf
typeprof 0.30.1 https://github.com/ruby/typeprof
debug 1.11.0 https://github.com/ruby/debug
racc 1.8.1 https://github.com/ruby/racc
Expand Down
Loading