Project

General

Profile

Actions

Bug #19921

closed

TestYJIT#test_bug_19316 test failure

Added by vo.x (Vit Ondruch) 7 months ago. Updated 6 months ago.

Status:
Closed
Assignee:
Target version:
-
ruby -v:
ruby 3.3.0dev (2023-10-12 master 52709a4862) [x86_64-linux]
[ruby-core:115016]

Description

Testing with 52709a4862 on Fedora Rawhide, I observe following failure:

 94) Failure:
TestYJIT#test_bug_19316 [/builddir/build/BUILD/ruby-3.3.0-52709a4862/test/ruby/test_yjit.rb:1126]:
Expected no exits, but got
{:opt_and=>1}

Updated by vo.x (Vit Ondruch) 7 months ago

Just FTR, previously I was testing with 904413997f and everything worked just fine.

Updated by vo.x (Vit Ondruch) 7 months ago

mtasaka (Mamoru Tasaka) wrote in #note-2:

This is failing (for me) since https://github.com/ruby/ruby/commit/492e9437dd33f64e283a9de21f49c65d3195c1f0

Interesting. Thx for looking into this. I saw this commit, but ruled it out initially. However, on the second look the exits: { opt_plus: 1 } from this hunk:

@@ -1153,7 +1153,7 @@ def foo
   end
 
   def test_invalidate_cyclic_branch
-    assert_compiles(<<~'RUBY', result: 2)
+    assert_compiles(<<~'RUBY', result: 2, exits: { opt_plus: 1 })
       def foo
         i = 0
         while i < 2

seem to correspond with the error message. That would mean that one test case might influence other, what would be unfortunate.

Updated by k0kubun (Takashi Kokubun) 7 months ago

  • Assignee set to yjit

Updated by k0kubun (Takashi Kokubun) 7 months ago

  • Status changed from Open to Feedback

I cannot reproduce your problem in my x86_64-linux environment (Ubuntu 22.04). It also seems to succeed on Ruby CI's Fedora 38 x86_64 and all other CIs. It might be specific to how you build Ruby. Can you provide a way to reproduce your build environment on our end, e.g. with a Docker container?

  1. Failure:

I see it's a 94th failure. What were the other failed tests?

However, on the second look the exits: { opt_plus: 1 } from this hunk:
seem to correspond with the error message.

"plus" and "and" are different.

That would mean that one test case might influence other, what would be unfortunate.

Each test runs in a separate subprocess.

Updated by mtasaka (Mamoru TASAKA) 7 months ago

Replying to the comment I can do quickly for now:

k0kubun (Takashi Kokubun) wrote in #note-5:

  1. Failure:

I see it's a 94th failure. What were the other failed tests?

Actually the other 93 tests are "Skipped". So build log shows something like:

Finished tests in 557.802217s, 46.9037 tests/s, 11010.2933 assertions/s.
26163 tests, 6141566 assertions, 1 failures, 0 errors, 93 skips

Updated by vo.x (Vit Ondruch) 7 months ago

Trying to reproduce this, I have hit this on x86_64 as well as on aarch64, while it passed on other architectures. The build is here:

https://koji.fedoraproject.org/koji/taskinfo?taskID=107436987

You can go into the architecture specific "descendants" builds, until you reach build.log, such as:

https://kojipkgs.fedoraproject.org//work/tasks/7059/107437059/build.log

All the dependencies installed for the build are listed here:

https://kojipkgs.fedoraproject.org//work/tasks/7059/107437059/root.log

The build seems to fail also on F38:

https://koji.fedoraproject.org/koji/taskinfo?taskID=107441872

This is the configuration and start of build:

... snip ...

+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
+ export CFLAGS
+ CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
+ export CXXFLAGS
+ FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules '
+ export FFLAGS
+ FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules '
+ export FCFLAGS
+ VALAFLAGS=-g
+ export VALAFLAGS
+ LDFLAGS='-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1  '
+ export LDFLAGS
+ LT_SYS_LIBRARY_PATH=/usr/lib64:
+ export LT_SYS_LIBRARY_PATH
+ CC=gcc
+ export CC
+ CXX=g++
+ export CXX
+ cd ruby-3.3.0-35edc14ee1
+ autoconf
+ mkdir -p redhat-linux-build
+ pushd redhat-linux-build
~/build/BUILD/ruby-3.3.0-35edc14ee1/redhat-linux-build ~/build/BUILD/ruby-3.3.0-35edc14ee1
+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
+ export CFLAGS
+ CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
+ export CXXFLAGS
+ FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules '
+ export FFLAGS
+ FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules '
+ export FCFLAGS
+ VALAFLAGS=-g
+ export VALAFLAGS
+ LDFLAGS='-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1  '
+ export LDFLAGS
+ LT_SYS_LIBRARY_PATH=/usr/lib64:
+ export LT_SYS_LIBRARY_PATH
+ CC=gcc
+ export CC
+ CXX=g++
+ export CXX
+ '[' '-flto=auto -ffat-lto-objectsx' '!=' x ']'
++ find . -type f -name configure -print
+ '[' 1 = 1 ']'
+++ dirname /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/configure
++ find /builddir/build/BUILD/ruby-3.3.0-35edc14ee1 -name config.guess -o -name config.sub
+ for i in $(find $(dirname /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/configure) -name config.guess -o -name config.sub)
++ basename /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.guess
+ '[' -f /usr/lib/rpm/redhat/config.guess ']'
+ /usr/bin/rm -f /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.guess
++ basename /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.guess
+ /usr/bin/cp -fv /usr/lib/rpm/redhat/config.guess /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.guess
'/usr/lib/rpm/redhat/config.guess' -> '/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.guess'
+ for i in $(find $(dirname /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/configure) -name config.guess -o -name config.sub)
++ basename /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.sub
+ '[' -f /usr/lib/rpm/redhat/config.sub ']'
+ /usr/bin/rm -f /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.sub
++ basename /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.sub
+ /usr/bin/cp -fv /usr/lib/rpm/redhat/config.sub /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.sub
'/usr/lib/rpm/redhat/config.sub' -> '/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/tool/config.sub'
+ '[' 1 = 1 ']'
+ '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']'
++ find . -name ltmain.sh
++ grep -q runstatedir=DIR /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/configure
++ echo --runstatedir=/run
+ /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-rubylibprefix=/usr/share/ruby --with-archlibdir=/usr/lib64 --with-rubyarchprefix=/usr/lib64/ruby --with-sitedir=/usr/local/share/ruby/site_ruby --with-sitearchdir=/usr/local/lib64/ruby/site_ruby --with-vendordir=/usr/share/ruby/vendor_ruby --with-vendorarchdir=/usr/lib64/ruby/vendor_ruby --with-rubyhdrdir=/usr/include --with-rubyarchhdrdir=/usr/include '--with-sitearchhdrdir=$(sitehdrdir)/$(arch)' '--with-vendorarchhdrdir=$(vendorhdrdir)/$(arch)' --with-rubygemsdir=/usr/share/rubygems --with-ruby-pc=ruby.pc --with-compress-debug-sections=no --disable-rpath --enable-mkmf-verbose --enable-shared --with-ruby-version= --enable-multiarch --enable-yjit
checking for ruby... false
checking build system type... x86_64-redhat-linux-gnu
checking host system type... x86_64-redhat-linux-gnu
checking target system type... x86_64-redhat-linux-gnu
checking for x86_64-redhat-linux-gnu-gcc... gcc
checking for ld... ld
checking for gcc-ar... gcc-ar
checking for g++... g++
checking for gcc-nm... gcc-nm
checking for gcc-ranlib... gcc-ranlib
checking for x86_64-redhat-linux-gnu-gcc... (cached) gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether the compiler supports GNU C++... no
checking whether g++ accepts -g... no
checking for g++ option to enable C++11 features... unsupported
checking for g++ option to enable C++98 features... unsupported
checking how to run the C preprocessor... gcc -E
checking for x86_64-redhat-linux-gnu-ranlib... (cached) gcc-ranlib
checking for x86_64-redhat-linux-gnu-gar... (cached) gcc-ar
checking for x86_64-redhat-linux-gnu-gas... no
checking for x86_64-redhat-linux-gnu-as... no
checking for gas... no
checking for as... as
checking for x86_64-redhat-linux-gnu-gld... (cached) ld
checking for x86_64-redhat-linux-gnu-gnm... (cached) gcc-nm
checking for x86_64-redhat-linux-gnu-gobjcopy... no
checking for x86_64-redhat-linux-gnu-objcopy... no
checking for gobjcopy... no
checking for objcopy... objcopy
checking for x86_64-redhat-linux-gnu-gobjdump... no
checking for x86_64-redhat-linux-gnu-objdump... no
checking for gobjdump... no
checking for objdump... objdump
checking for x86_64-redhat-linux-gnu-gstrip... no
checking for x86_64-redhat-linux-gnu-strip... no
checking for gstrip... no
checking for strip... strip
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for wchar.h... yes
checking for minix/config.h... no
checking for vfork.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking whether _XOPEN_SOURCE should be defined... no
checking whether the linker is GNU ld... yes
checking whether gcc -E accepts -o... yes
checking for gcc-ar flags... rcD
checking whether ln -s works... yes
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for x86_64-redhat-linux-gnu-dtrace... no
checking for dtrace... dtrace
checking for dot... no
checking for doxygen... no
checking for x86_64-redhat-linux-gnu-pkg-config... x86_64-redhat-linux-gnu-pkg-config
checking whether it is Android... no
checking for cd using physical directory... cd -P
checking whether CFLAGS is valid... yes
checking whether LDFLAGS is valid... yes
checking whether ELF binaries are produced... yes
checking whether -Wl,-rpath,. is accepted as LDFLAGS... yes
checking whether -fdeclspec is accepted as LDFLAGS... no
checking whether -fdeclspec is accepted as CXXFLAGS... no
checking whether -Wextra-tokens is accepted as CFLAGS... no
checking whether -Wdeprecated-declarations is accepted as CFLAGS... yes
checking whether -Wdivision-by-zero is accepted as CFLAGS... no
checking whether -Wdiv-by-zero is accepted as CFLAGS... yes
checking whether -Wduplicated-cond is accepted as CFLAGS... yes
checking whether -Wimplicit-function-declaration is accepted as CFLAGS... yes
checking whether -Wimplicit-int is accepted as CFLAGS... yes
checking whether -Wpointer-arith is accepted as CFLAGS... yes
checking whether -Wshorten-64-to-32 is accepted as CFLAGS... no
checking whether -Wwrite-strings is accepted as CFLAGS... yes
checking whether -Wold-style-definition is accepted as CFLAGS... yes
checking whether -Wimplicit-fallthrough=0 is accepted as CFLAGS... yes
checking whether -Wmissing-noreturn is accepted as CFLAGS... yes
checking whether -Wno-cast-function-type is accepted as CFLAGS... yes
checking whether -Wno-constant-logical-operand is accepted as CFLAGS... yes
checking whether -Wno-long-long is accepted as CFLAGS... yes
checking whether -Wno-missing-field-initializers is accepted as CFLAGS... yes
checking whether -Wno-overlength-strings is accepted as CFLAGS... yes
checking whether -Wno-packed-bitfield-compat is accepted as CFLAGS... yes
checking whether -Wno-parentheses-equality is accepted as CFLAGS... yes
checking whether -Wno-self-assign is accepted as CFLAGS... yes
checking whether -Wno-tautological-compare is accepted as CFLAGS... yes
checking whether -Wno-unused-parameter is accepted as CFLAGS... yes
checking whether -Wno-unused-value is accepted as CFLAGS... yes
checking whether -Wsuggest-attribute=format is accepted as CFLAGS... yes
checking whether -Wsuggest-attribute=noreturn is accepted as CFLAGS... yes
checking whether -Wunused-variable is accepted as CFLAGS... yes
checking whether -diag-disable=175,188,1684,2259,2312 is accepted as CFLAGS... no
checking whether -Wmisleading-indentation is accepted as CFLAGS... yes
checking whether -Wundef is accepted as CFLAGS... yes
checking whether -Wall -Wextra is accepted as CFLAGS... yes
checking whether -Qunused-arguments is accepted as CFLAGS... no
checking whether -O3 -D_FORTIFY_SOURCE=2 is accepted as CFLAGS... yes
checking whether -fstack-protector-strong is accepted as CFLAGS... yes
checking whether -fstack-protector-strong is accepted as LDFLAGS... yes
checking for -fstack-protector... -fstack-protector-strong
checking whether -fno-strict-overflow is accepted as CFLAGS... yes
checking whether -ggdb3 is accepted as CFLAGS... yes
checking whether -fvisibility=hidden is accepted as CFLAGS... yes
checking whether -fno-fast-math is accepted as CFLAGS... yes
checking whether -fexcess-precision=standard is accepted as CFLAGS... yes
checking whether -fp-model precise is accepted as CFLAGS... no
checking whether compiler has statement and declarations in expressions... yes
checking for pthread.h... yes
checking for pthread_create in -lthr... no
checking for pthread_create in -lpthread... yes
checking for pthread_np.h... no
checking thread model... pthread
configure: Test skipped due to lack of a C++ compiler.
checking for crypt in -lcrypt... yes
checking for dlopen in -ldl... yes
checking for shutdown in -lsocket... no
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking for _Bool... yes
checking for stdbool.h that conforms to C99... yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking for afunix.h... no
checking for atomic.h... no
checking for copyfile.h... no
checking for direct.h... no
checking for grp.h... yes
checking for fcntl.h... yes
checking for float.h... yes
checking for ieeefp.h... no
checking for intrinsics.h... no
checking for langinfo.h... yes
checking for limits.h... yes
checking for locale.h... yes
checking for malloc.h... yes
checking for malloc/malloc.h... no
checking for malloc_np.h... no
checking for net/socket.h... no
checking for process.h... no
checking for pwd.h... yes
checking for sanitizer/asan_interface.h... yes
checking for sanitizer/msan_interface.h... no
checking for setjmpex.h... no
checking for stdalign.h... yes
checking for stdio.h... (cached) yes
checking for sys/attr.h... no
checking for sys/eventfd.h... yes
checking for sys/fcntl.h... yes
checking for sys/file.h... yes
checking for sys/id.h... no
checking for sys/ioctl.h... yes
checking for sys/mkdev.h... no
checking for sys/param.h... yes
checking for sys/prctl.h... yes
checking for sys/random.h... yes
checking for sys/resource.h... yes
checking for sys/select.h... yes
checking for sys/sendfile.h... yes
checking for sys/socket.h... yes
checking for sys/syscall.h... yes
checking for sys/sysmacros.h... yes
checking for sys/time.h... yes
checking for sys/times.h... yes
checking for sys/uio.h... yes
checking for sys/utime.h... no
checking for syscall.h... yes
checking for time.h... yes
checking for ucontext.h... yes
checking for utime.h... yes
checking for sys/epoll.h... yes
checking for x86intrin.h... yes
checking for x86intrin.h when defined(__x86_64__)... yes
checking for gmp.h... yes
checking for library containing __gmpz_init... -lgmp
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking whether byte ordering is bigendian... no
checking for an ANSI C-conforming const... yes
checking whether char is unsigned... no
checking for inline... inline
checking for working volatile... yes
checking for typeof syntax and keyword spelling... typeof
checking for C/C++ restrict keyword... __restrict__
checking for long long... yes
checking for off_t... yes
checking char bit... 8
checking size of int... 4
checking size of short... 2
checking size of long... 8
checking size of long long... 8
checking size of __int64... 0
checking size of __int128... 16
checking size of off_t... 8
checking size of void*... 8
checking size of float... 4
checking size of double... 8
checking size of time_t... 8
checking size of clock_t... 8
checking packed struct attribute... x __attribute__((packed))
checking whether -Wno-address-of-packed-member is accepted as CFLAGS... yes
checking for printf prefix for long long... ll
checking for pid_t... yes
checking for convertible type of pid_t... INT
checking for uid_t... yes
checking for convertible type of uid_t... UINT
checking for gid_t... yes
checking for convertible type of gid_t... UINT
checking for time_t... yes
checking for convertible type of time_t... LONG
checking for dev_t... yes
checking for convertible type of dev_t... ULONG
checking for mode_t... yes
checking for convertible type of mode_t... UINT
checking for rlim_t... yes
checking for convertible type of rlim_t... ULONG
checking for off_t... (cached) yes
checking for convertible type of off_t... LONG
checking for clockid_t... yes
checking for convertible type of clockid_t... INT
checking for variable length macro... yes
checking if _Alignof() works... yes
checking for CONSTFUNC function attribute... __attribute__ ((__const__)) x
checking for PUREFUNC function attribute... __attribute__ ((__pure__)) x
checking for NORETURN function attribute... __attribute__ ((__noreturn__)) x
checking for DEPRECATED function attribute... __attribute__ ((__deprecated__)) x
checking for DEPRECATED_BY function attribute... __attribute__ ((__deprecated__("by "#n))) x
checking for NOINLINE function attribute... __attribute__ ((__noinline__)) x
checking for ALWAYS_INLINE function attribute... __attribute__ ((__always_inline__)) x
checking for NO_SANITIZE function attribute... __attribute__ ((__no_sanitize__(san))) x
checking for NO_SANITIZE_ADDRESS function attribute... __attribute__ ((__no_sanitize_address__)) x
checking for NO_ADDRESS_SAFETY_ANALYSIS function attribute... __attribute__ ((__no_address_safety_analysis__)) x
checking for WARN_UNUSED_RESULT function attribute... __attribute__ ((__warn_unused_result__)) x
checking for MAYBE_UNUSED function attribute... __attribute__ ((__unused__)) x
checking for ERRORFUNC function attribute... __attribute__ ((__error__ mesg)) x
checking for WARNINGFUNC function attribute... __attribute__ ((__warning__ mesg)) x
checking for WEAK function attribute... __attribute__ ((__weak__)) x
checking for __attribute__((__depreacted__(msg))) in C++... no
checking for std::nullptr_t... no
checking for FUNC_STDCALL function attribute... x
checking for FUNC_CDECL function attribute... x
checking for FUNC_FASTCALL function attribute... x
checking for FUNC_UNOPTIMIZED function attribute... __attribute__ ((__optimize__("O0"))) x
checking for FUNC_MINIMIZED function attribute... __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
checking for function alias... alias
checking for __atomic builtins... yes
checking for __sync builtins... yes
checking for __builtin_unreachable... yes
checking for __assume... no
checking for exported function attribute... __attribute__ ((__visibility__("default")))
checking for RUBY_FUNC_NONNULL function attribute... __attribute__ ((__nonnull__(n))) x
checking for function name string predefined identifier... __func__
checking if enum over int is allowed... yes
checking for gcc options needed to detect all undeclared functions... none needed
checking whether sys_nerr is declared... no
checking whether getenv is declared... yes
checking for size_t... yes
checking size of size_t... 8
checking size of ptrdiff_t... 8
checking size of dev_t... 8
checking for printf prefix for size_t... z
checking for printf prefix for ptrdiff_t... t
checking for struct stat.st_blksize... yes
checking for struct stat.st_blocks... yes
checking for struct stat.st_rdev... yes
checking size of struct stat.st_size... SIZEOF_OFF_T
checking size of struct stat.st_blocks... SIZEOF_OFF_T
checking size of struct stat.st_ino... SIZEOF_LONG
checking size of struct stat.st_dev... SIZEOF_DEV_T
checking size of struct stat.st_rdev... SIZEOF_DEV_T
checking for struct stat.st_atim... yes
checking for struct stat.st_atimespec... no
checking for struct stat.st_atimensec... no
checking for struct stat.st_mtim... yes
checking for struct stat.st_mtimespec... no
checking for struct stat.st_mtimensec... no
checking for struct stat.st_ctim... yes
checking for struct stat.st_ctimespec... no
checking for struct stat.st_ctimensec... no
checking for struct stat.st_birthtimespec... no
checking for struct statx.stx_btime... yes
checking for struct timeval... yes
checking size of struct timeval.tv_sec... SIZEOF_TIME_T
checking for struct timespec... yes
checking for struct timezone... yes
checking for fd_mask... yes
checking for int8_t... yes
checking size of int8_t... 1
checking for uint8_t... yes
checking size of uint8_t... 1
checking for int16_t... yes
checking size of int16_t... 2
checking for uint16_t... yes
checking size of uint16_t... 2
checking for int32_t... yes
checking size of int32_t... 4
checking for uint32_t... yes
checking size of uint32_t... 4
checking for int64_t... yes
checking size of int64_t... 8
checking for uint64_t... yes
checking size of uint64_t... 8
checking for int128_t... __int128
checking for uint128_t... unsigned __int128
checking for intptr_t... yes
checking size of intptr_t... 8
checking for uintptr_t... yes
checking size of uintptr_t... 8
checking for printf prefix for intptr_t... NONE
checking for ssize_t... yes
checking size of ssize_t... 8
checking for printf prefix for int64_t... NONE
checking for stack end address... __libc_stack_end
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for uid_t in sys/types.h... (cached) yes
checking type of array argument to getgroups... gid_t
checking for working alloca.h... yes
checking for alloca... yes
checking for dynamic size alloca... ok
checking for working memcmp... yes
checking for dup... yes
checking for dup2... yes
checking for acosh... yes
checking for cbrt... yes
checking for crypt... yes
checking for erf... yes
checking for explicit_bzero... yes
checking for ffs... yes
checking for flock... yes
checking for hypot... yes
checking for lgamma_r... yes
checking for memmove... yes
checking for nan... yes
checking for nextafter... yes
checking for setproctitle... no
checking for strchr... yes
checking for strerror... yes
checking for strlcat... no
checking for strlcpy... no
checking for strstr... yes
checking for tgamma... yes
checking for sys/pstat.h... no
checking for pid_t... (cached) yes
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking for __syscall... no
checking for _longjmp... yes
checking for arc4random_buf... yes
checking for atan2l... yes
checking for atan2f... yes
checking for chmod... yes
checking for chown... yes
checking for chroot... yes
checking for chsize... no
checking for clock_gettime... yes
checking for copy_file_range... yes
checking for cosh... yes
checking for crypt_r... yes
checking for daemon... (cached) no
checking for dirfd... yes
checking for dl_iterate_phdr... yes
checking for dlopen... yes
checking for dladdr... yes
checking for dup3... yes
checking for eaccess... yes
checking for endgrent... yes
checking for eventfd... yes
checking for execl... yes
checking for execle... yes
checking for execv... yes
checking for execve... yes
checking for explicit_memset... no
checking for fcopyfile... no
checking for fchdir... yes
checking for fchmod... yes
checking for fchown... yes
checking for fcntl... yes
checking for fdatasync... yes
checking for fdopendir... yes
checking for fgetattrlist... no
checking for fmod... yes
checking for fstatat... yes
checking for fsync... yes
checking for ftruncate... yes
checking for ftruncate64... yes
checking for getattrlist... no
checking for getcwd... yes
checking for getegid... yes
checking for getentropy... yes
checking for geteuid... yes
checking for getgid... yes
checking for getgidx... no
checking for getgrnam... yes
checking for getgrnam_r... yes
checking for getgroups... yes
checking for getlogin... yes
checking for getlogin_r... yes
checking for getpgid... yes
checking for getpgrp... yes
checking for getppid... yes
checking for getpriority... yes
checking for getpwnam... yes
checking for getpwnam_r... yes
checking for getpwuid... yes
checking for getpwuid_r... yes
checking for getrandom... yes
checking for getresgid... yes
checking for getresuid... yes
checking for getrlimit... yes
checking for getsid... yes
checking for gettimeofday... yes
checking for getuid... yes
checking for getuidx... no
checking for gmtime_r... yes
checking for grantpt... yes
checking for initgroups... yes
checking for ioctl... yes
checking for isfinite... no
checking for issetugid... no
checking for kill... yes
checking for killpg... yes
checking for lchmod... yes
checking for lchown... yes
checking for link... yes
checking for llabs... yes
checking for lockf... yes
checking for log2... yes
checking for lstat... yes
checking for lutimes... yes
checking for malloc_usable_size... yes
checking for malloc_size... no
checking for malloc_trim... yes
checking for mblen... yes
checking for memalign... yes
checking for memset_s... no
checking for writev... yes
checking for memrchr... yes
checking for memmem... yes
checking for mkfifo... yes
checking for mknod... yes
checking for mktime... yes
checking for mmap... yes
checking for mremap... yes
checking for openat... yes
checking for pclose... yes
checking for pipe... yes
checking for pipe2... yes
checking for poll... yes
checking for popen... yes
checking for posix_fadvise... yes
checking for posix_madvise... yes
checking for posix_memalign... yes
checking for ppoll... yes
checking for pread... yes
checking for pwrite... yes
checking for qsort_r... yes
checking for qsort_s... no
checking for readlink... yes
checking for realpath... yes
checking for round... yes
checking for sched_getaffinity... yes
checking for seekdir... yes
checking for select_large_fdset... no
checking for sendfile... yes
checking for setegid... yes
checking for setenv... yes
checking for seteuid... yes
checking for setgid... yes
checking for setgroups... yes
checking for setpgid... yes
checking for setpgrp... yes
checking for setregid... yes
checking for setresgid... yes
checking for setresuid... yes
checking for setreuid... yes
checking for setrgid... no
checking for setrlimit... yes
checking for setruid... no
checking for setsid... yes
checking for setuid... yes
checking for shutdown... yes
checking for sigaction... yes
checking for sigaltstack... yes
checking for sigprocmask... yes
checking for sinh... yes
checking for snprintf... yes
checking for spawnv... no
checking for symlink... yes
checking for syscall... yes
checking for sysconf... yes
checking for system... yes
checking for tanh... yes
checking for telldir... yes
checking for timegm... yes
checking for times... yes
checking for truncate... yes
checking for truncate64... yes
checking for tzset... yes
checking for umask... yes
checking for unsetenv... yes
checking for utimensat... yes
checking for utimes... yes
checking for wait4... yes
checking for waitpid... yes
checking for __cospi... no
checking for __sinpi... no
checking for statx... yes
checking if getcwd allocates buffer if NULL is given... yes
checking for crypt.h... yes
checking for struct crypt_data.initialized... yes
checking for __builtin_alloca_with_align... yes
checking for __builtin_assume_aligned... yes
checking for __builtin_bswap16... yes
checking for __builtin_bswap32... yes
checking for __builtin_bswap64... yes
checking for __builtin_popcount... yes
checking for __builtin_popcountll... yes
checking for __builtin_clz... yes
checking for __builtin_clzl... yes
checking for __builtin_clzll... yes
checking for __builtin_ctz... yes
checking for __builtin_ctzll... yes
checking for __builtin_add_overflow... yes
checking for __builtin_sub_overflow... yes
checking for __builtin_mul_overflow... yes
checking for __builtin_mul_overflow_p... yes
checking for __builtin_constant_p... yes
checking for __builtin_choose_expr... yes
checking for __builtin_choose_expr_constant_p... yes
checking for __builtin_types_compatible_p... yes
checking for __builtin_trap... yes
checking for __builtin_expect... yes
checking for __builtin_mul_overflow with long long arguments... yes
checking whether qsort_r is GNU version... yes
checking whether qsort_r is BSD version... no
checking whether atan2 handles Inf as C99... yes
checking for clock_getres... yes
checking for timer_create in -lrt... yes
checking for timer_settime in -lrt... yes
checking for unsetenv returns a value... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for struct tm.tm_zone... yes
checking for struct tm.tm_gmtoff... yes
checking for external int daylight... yes
checking for negative time_t for gmtime(3)... yes
checking for localtime(3) overflow correctly... yes
checking for sig_t... yes
checking whether right shift preserve sign bit... yes
checking whether _SC_CLK_TCK is supported... yes
checking stack growing direction on x86_64... -1
checking native coroutine implementation for x86_64-linux... amd64
checking whether pthread_t is scalar type... yes
checking for sched_yield... yes
checking for pthread_attr_setinheritsched... yes
checking for pthread_attr_get_np... no
checking for pthread_attr_getstack... yes
checking for pthread_attr_getguardsize... yes
checking for pthread_get_stackaddr_np... no
checking for pthread_get_stacksize_np... no
checking for thr_stksegment... no
checking for pthread_stackseg_np... no
checking for pthread_getthrds_np... no
checking for pthread_condattr_setclock... yes
checking for pthread_setname_np... yes
checking for pthread_set_name_np... no
checking for pthread_sigmask... yes
checking for pthread_getattr_np... yes
checking arguments of pthread_setname_np... (pthread_self(), name)
checking for thread-local storage sepcifier... _Thread_local
checking if mcontext_t is a pointer... no
checking for getcontext... yes
checking for setcontext... yes
checking if fork works with pthread... yes
checking for sys/user.h... yes
checking whether PAGE_SIZE is compile-time const... yes
checking ioctl request type... unsigned long
checking for elf.h... yes
checking for elf_abi.h... no
checking for uncompress in -lz... yes
checking for mach-o/loader.h... no
checking whether OS depend dynamic link works... yes
checking for backtrace... yes
checking for broken backtrace... no
checking for valgrind/memcheck.h... no
checking for strip flags... -S -x
checking whether -Wl,--no-as-needed is accepted as LDFLAGS... yes
checking whether -Wl,--no-undefined is accepted as LDFLAGS... yes
checking whether wrapper for LD_LIBRARY_PATH is needed... no
checking whether dtrace USDT is available... yes
checking whether dtrace needs post processing... yes
checking for __builtin_setjmp... (cached) no
checking for _setjmpex as a macro or function... no
checking for _setjmp as a macro or function... yes
checking for sigsetjmp as a macro or function... no
checking for setjmp type... _setjmp
checking for rustc... rustc
checking whether rustc works for YJIT... yes
checking for prefix of external symbols... NONE
checking if make is GNU make... yes
.ext/include/x86_64-linux/ruby/config.h updated
configure: ruby library version = 3.3.0+0
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating Makefile
---
Configuration summary for ruby version 3.3.0
   * Installation prefix: /usr
   * exec prefix:         /usr
   * arch:                x86_64-linux
   * site arch:           ${arch}
   * RUBY_BASE_NAME:      ruby
   * enable shared:       yes
   * ruby lib prefix:     ${exec_prefix}/share/ruby
   * site libraries path: ${sitearchlibdir}/${RUBY_BASE_NAME}
   * vendor path:         /usr/share/ruby/vendor_ruby
   * target OS:           linux
   * compiler:            gcc
   * with thread:         pthread
   * with coroutine:      amd64
   * enable shared libs:  yes
   * dynamic library ext: so
   * CFLAGS:              ${optflags} ${debugflags} ${warnflags}
   * LDFLAGS:             -L. -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now \
                          -specs=/usr/lib/rpm/redhat/redhat-hardened-ld \
                          -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  \
                          -Wl,--build-id=sha1 -fstack-protector-strong \
                          -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed
   * DLDFLAGS:            -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now \
                          -specs=/usr/lib/rpm/redhat/redhat-hardened-ld \
                          -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  \
                          -Wl,--build-id=sha1  
   * optflags:            -O3 -fno-fast-math
   * debugflags:          -ggdb3
   * warnflags:           -Wall -Wextra -Wdeprecated-declarations \
                          -Wdiv-by-zero -Wduplicated-cond \
                          -Wimplicit-function-declaration -Wimplicit-int \
                          -Wpointer-arith -Wwrite-strings \
                          -Wold-style-definition -Wimplicit-fallthrough=0 \
                          -Wmissing-noreturn -Wno-cast-function-type \
                          -Wno-constant-logical-operand -Wno-long-long \
                          -Wno-missing-field-initializers \
                          -Wno-overlength-strings \
                          -Wno-packed-bitfield-compat \
                          -Wno-parentheses-equality -Wno-self-assign \
                          -Wno-tautological-compare -Wno-unused-parameter \
                          -Wno-unused-value -Wsuggest-attribute=format \
                          -Wsuggest-attribute=noreturn -Wunused-variable \
                          -Wmisleading-indentation -Wundef
   * strip command:       strip -S -x
   * install doc:         rdoc
   * YJIT support:        yes
   * RJIT support:        yes
   * man page type:       doc
---
+ popd
~/build/BUILD/ruby-3.3.0-35edc14ee1
+ /usr/bin/make -O -j48 V=1 VERBOSE=1 'COPY=cp -p' -C redhat-linux-build
make: Entering directory '/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/redhat-linux-build'
	BASERUBY = echo executable host ruby is required.  use --with-baseruby option.; false
	CC = gcc
	LD = ld
	LDSHARED = gcc -shared
	CFLAGS = -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64
	XCFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/include -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1 -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/prism -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/enc/unicode/15.0.0  
	CPPFLAGS =   
	DLDFLAGS = -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1   -Wl,-soname,libruby.so.3.3 -fstack-protector-strong  -m64
	SOLIBS = -lz -lrt -lrt -lgmp -ldl -lcrypt -lm -lpthread 
	LANG = C
	LC_ALL = 
	LC_CTYPE = 
	MFLAGS = -j48 -Otarget --jobserver-auth=fifo:/tmp/GMfifo10281 --sync-mutex=fnm:/tmp/GmH7Ojzo
	RUSTC = rustc
	YJIT_RUSTC_ARGS = --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C lto=thin -C opt-level=3 -C overflow-checks=on '--out-dir=/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/redhat-linux-build/yjit/target/release/' /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/yjit/src/lib.rs
gcc (GCC) 13.2.1 20230728 (Red Hat 13.2.1-1)
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
make: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/redhat-linux-build'
make: Entering directory '/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/redhat-linux-build'
gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/include -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1 -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/prism -I/builddir/build/BUILD/ruby-3.3.0-35edc14ee1/enc/unicode/15.0.0      -o dmyext.o -c /builddir/build/BUILD/ruby-3.3.0-35edc14ee1/dmyext.c

... snip ...

Updated by k0kubun (Takashi Kokubun) 7 months ago

I don't see anything that stands out in your build logs, so I'm still not sure if I can reproduce the issue myself. Since you seem to know how to reproduce this, could you consider reproducing the same issue on GitHub Actions (by modifying configs like .github/workflows/ubuntu.yml) so that we can see the issue on pull requests? If you can open a pull request that fails this test on GitHub Actions, that'd be appreciated. But right now, this is something the team cannot reproduce and investigate.

Updated by vo.x (Vit Ondruch) 7 months ago

@jaruga (Jun Aruga) could you please help with the reproducer. I think you are the best person 😇

Updated by jaruga (Jun Aruga) 6 months ago

vo.x (Vit Ondruch) wrote in #note-9:

@jaruga (Jun Aruga) could you please help with the reproducer. I think you are the best person 😇

Sure. Let me check this ticket later.

Updated by mtasaka (Mamoru TASAKA) 6 months ago

I tried 6c46ccf226bc6440743b51af713864c062eba27f but I see the same test failure.

Updated by k0kubun (Takashi Kokubun) 6 months ago

I'm afraid we need a repro from you on CI (or anything I can exactly reproduce, like on Dockerfile) then. Subprocess tests like test_yjit in test-all generally seem to have a problem of picking a wrong Ruby, and it could be very much specific to how you set up your environment. So it's hard for us to look into it without such a repro.

Updated by vo.x (Vit Ondruch) 6 months ago

k0kubun (Takashi Kokubun) wrote in #note-13:

Subprocess tests like test_yjit in test-all generally seem to have a problem of picking a wrong Ruby

Just FTR, there is no other Ruby installed in the environment during build, so this is certainly not an issue.

Updated by k0kubun (Takashi Kokubun) 6 months ago

Just FTR, there is no other Ruby installed in the environment during build, so this is certainly not an issue.

OK, it explains why https://github.com/ruby/ruby/pull/8689 did not help. If that part is fine, I have nothing else to try until I get a repro.

Updated by alanwu (Alan Wu) 6 months ago

Could someone kick off a Koji build with 9047fe5ea4e8c989c1081aa10f741a413c546534
"YJIT: Print exit reasons on failure in test_yjit.rb"?
It adds some extra information to the failure message that should resolve this
mystery. This will likely be the last run we need to spend on this issue and is
mostly for my own curiosity. The failing test is fine with the exit; merely
checking the result is good enough (see ruby-core:112973 from 7 months ago).

Regardless of the outcome of the Koji attempt, we'll put exits: :any on the
test in a day or so to resolve this issue.

Updated by mtasaka (Mamoru TASAKA) 6 months ago

With 985370406d2c5150fa3e0f23cdae605ec1a60fdb

 93) Failure:
TestYJIT#test_bug_19316 [/builddir/build/BUILD/ruby-3.3.0-985370406d/test/ruby/test_yjit.rb:1163]:
Expected no exits, but got:
{:opt_and=>1}
Reasons:
method call fallback reasons: 
    (all relevant counters are zero)
invokeblock fallback reasons: 
    (all relevant counters are zero)
invokesuper fallback reasons: 
    (all relevant counters are zero)
method call exit reasons: 
    interrupted:          1 (100.0%)
invokeblock exit reasons: 
    (all relevant counters are zero)
invokesuper exit reasons: 
    (all relevant counters are zero)
getblockparamproxy exit reasons: 
    (all relevant counters are zero)
getinstancevariable exit reasons:
    (all relevant counters are zero)
setinstancevariable exit reasons:
    (all relevant counters are zero)
leave exit reasons:
    interp_return:          4 (100.0%)
left shift (ltlt) exit reasons: 
    (all relevant counters are zero)
invalidation reasons: 
    constant_ic_fill:          2 (100.0%)
Finished tests in 754.862764s, 34.7414 tests/s, 8236.9409 assertions/s.
26225 tests, 6217760 assertions, 1 failures, 0 errors, 92 skips
ruby -v: ruby 3.3.0dev (2023-10-20 master 985370406d) [x86_64-linux]

Updated by alanwu (Alan Wu) 6 months ago

  • Status changed from Feedback to Closed

Thanks! The new message confirms the issue. The test should pass now, as of fab70183.

Updated by jaruga (Jun Aruga) 6 months ago

alanwu (Alan Wu) wrote in #note-18:

Thanks! The new message confirms the issue. The test should pass now, as of fab70183.

Thanks for the fix! I am glad for that.

https://github.com/ruby/ruby/commit/fab7018346488a693d34ea81f1e9d6fec476f06e

Because the & call checks for interrupts, the test was accidentally
timing dependent. Stop checking for exits.

Seeing the commit message, what the "& call checks" mean? What makes the failure?

I observed that the test TestYJIT#test_bug_19316 failed for the Ruby (based on the ef3f9f1a685effb51543d1f08831692fa68863a2 + patch files) before the fixed commit, on Fedora rawhide (Fedora 40), 39, 38 every time so far.

Below is the command log on Fedora's build environment (called mock environment) for the Ruby above.

$ make -C redhat-linux-build test-all TESTS="../test/ruby/test_yjit.rb -n TestYJIT#test_bug_19316 -v"
...
# Running tests:

[1/1] TestYJIT#test_bug_19316 = 1.12 s

  1) Failure:
TestYJIT#test_bug_19316 [/builddir/build/BUILD/ruby-3.3.0-ef3f9f1a68/test/ruby/test_yjit.rb:1152]:
Expected no exits, but got
{:opt_and=>1}

Finished tests in 1.123462s, 0.8901 tests/s, 4.4505 assertions/s.
1 tests, 5 assertions, 1 failures, 0 errors, 0 skips

I was planning to check the variations of the builds to find which factor causes the failure. But as you fixed the issue, I will pend the investigation happily for now.

  • Ruby + no additional patches + the compiler flags used to build RPM in Fedora + Fedora's build environment.
  • Ruby + no additional patches + the compiler flags used to build RPM in Fedora + RubyCI Fedora 38 server.
  • Ruby + no additional patches + the variations of the compiler flags + RubyCI Fedora 38 server.

Updated by alanwu (Alan Wu) 6 months ago

Seeing the commit message, what the "& call checks" mean? What makes the failure?

It's the a & b call to Integer#& in the test. The failure was from a time-based interrupt, which is used for thread switching and for IO operations like stat(2) which Kernel#require uses. The test itself shouldn't be doing any IO, but I see that you carry ruby-2.7.0-Initialize-ABRT-hook.patch, which makes the VM use Kernel#require on boot. That might be the source of the interrupt.

This is pure speculation; you can try testing without the patch if you're curious.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0