Try default `gcc` 9.4.0 to see if it exhibits the same compiler bugs. (#8394)

* Revert "Extract `do_mutex_lock_check_interrupts` to try and fix `ppc64le`. (#8393)"

This reverts commit 5184b40dd4.

* .travis.yml: Try default gcc 9.4.0 instead of gcc-10 in ppc64le and s390x.

Use gcc 9.4.0 instead of gcc-10 to avoid the current failures by a possible GCC
10 compiler bug in the Travis ppc64le and s390x cases. And it also aligns with
RubyCI Ubuntu ppc64le and s390x where the default gcc is used.

---------

Co-authored-by: Jun Aruga <jaruga@ruby-lang.org>
This commit is contained in:
Samuel Williams 2023-09-08 20:44:46 +12:00 коммит произвёл GitHub
Родитель 15fd897629
Коммит be21a056d2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 11 добавлений и 25 удалений

Просмотреть файл

@ -82,12 +82,12 @@ env:
- &ppc64le-linux
name: ppc64le-linux
arch: ppc64le
<<: *gcc-10
compiler: gcc
- &s390x-linux
name: s390x-linux
arch: s390x
<<: *gcc-10
compiler: gcc
- &arm32-linux
name: arm32-linux

Просмотреть файл

@ -290,28 +290,6 @@ delete_from_waitq(VALUE value)
return Qnil;
}
static void
do_mutex_lock_check_interrupts(int interruptible_p, rb_fiber_t *fiber, rb_mutex_t *mutex, rb_thread_t *thread)
{
// We extracted this function because we suspect there can be a codegen bug
// on ppc64le and moving this code to a separate function seems to fix the
// problem, at least in my tests.
if (interruptible_p) {
/* release mutex before checking for interrupts...as interrupt checking
* code might call rb_raise() */
if (mutex->fiber == fiber) {
mutex->fiber = 0;
}
RUBY_VM_CHECK_INTS_BLOCKING(thread->ec); /* may release mutex */
if (!mutex->fiber) {
mutex->fiber = fiber;
}
}
}
static VALUE
do_mutex_lock(VALUE self, int interruptible_p)
{
@ -400,7 +378,15 @@ do_mutex_lock(VALUE self, int interruptible_p)
rb_ractor_sleeper_threads_dec(th->ractor);
}
do_mutex_lock_check_interrupts(interruptible_p, fiber, mutex, th);
if (interruptible_p) {
/* release mutex before checking for interrupts...as interrupt checking
* code might call rb_raise() */
if (mutex->fiber == fiber) mutex->fiber = 0;
RUBY_VM_CHECK_INTS_BLOCKING(th->ec); /* may release mutex */
if (!mutex->fiber) {
mutex->fiber = fiber;
}
}
}
if (mutex->fiber == fiber) mutex_locked(th, self);