diff --git a/.github/workflows/zjit-ubuntu.yml b/.github/workflows/zjit-ubuntu.yml index a30ff1df88fdd9..02afda470aec47 100644 --- a/.github/workflows/zjit-ubuntu.yml +++ b/.github/workflows/zjit-ubuntu.yml @@ -69,8 +69,9 @@ jobs: - test_task: 'zjit-bindgen' hint: 'To fix: use patch in logs' - configure: '--enable-zjit=dev --with-gcc=clang-14' - libclang_path: '/usr/lib/llvm-14/lib/libclang.so.1' + configure: '--enable-zjit=dev --with-gcc=clang-16' + clang_path: '/usr/bin/clang-16' + runs-on: 'ubuntu-24.04' # for clang-16 - test_task: 'test-bundled-gems' configure: '--enable-zjit=dev' @@ -87,7 +88,7 @@ jobs: RUST_BACKTRACE: 1 ZJIT_RB_BUG: 1 - runs-on: ubuntu-22.04 + runs-on: ${{ matrix.runs-on || 'ubuntu-22.04' }} if: >- ${{!(false @@ -175,7 +176,7 @@ jobs: PRECHECK_BUNDLED_GEMS: 'no' SYNTAX_SUGGEST_TIMEOUT: '5' ZJIT_BINDGEN_DIFF_OPTS: '--exit-code' - LIBCLANG_PATH: ${{ matrix.libclang_path }} + CLANG_PATH: ${{ matrix.clang_path }} TESTS: ${{ matrix.test_all_opts }} continue-on-error: ${{ matrix.continue-on-test_task || false }} diff --git a/ext/-test-/asan/asan.c b/ext/-test-/asan/asan.c deleted file mode 100644 index 45b6253fdac8c8..00000000000000 --- a/ext/-test-/asan/asan.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "ruby/ruby.h" - -static VALUE -asan_enabled_p(VALUE self) -{ -#if defined(__has_feature) - /* clang uses __has_feature for determining asan */ - return __has_feature(address_sanitizer) ? Qtrue : Qfalse; -#elif defined(__SANITIZE_ADDRESS__) - /* GCC sets __SANITIZE_ADDRESS__ for determining asan */ - return Qtrue; -#else - return Qfalse; -#endif -} - -void -Init_asan(void) -{ - VALUE m = rb_define_module("Test"); - VALUE c = rb_define_class_under(m, "ASAN", rb_cObject); - rb_define_singleton_method(c, "enabled?", asan_enabled_p, 0); -} - diff --git a/ext/-test-/asan/depend b/ext/-test-/asan/depend deleted file mode 100644 index 93cdc739ec63b7..00000000000000 --- a/ext/-test-/asan/depend +++ /dev/null @@ -1,162 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -asan.o: $(RUBY_EXTCONF_H) -asan.o: $(arch_hdrdir)/ruby/config.h -asan.o: $(hdrdir)/ruby/assert.h -asan.o: $(hdrdir)/ruby/backward.h -asan.o: $(hdrdir)/ruby/backward/2/assume.h -asan.o: $(hdrdir)/ruby/backward/2/attributes.h -asan.o: $(hdrdir)/ruby/backward/2/bool.h -asan.o: $(hdrdir)/ruby/backward/2/inttypes.h -asan.o: $(hdrdir)/ruby/backward/2/limits.h -asan.o: $(hdrdir)/ruby/backward/2/long_long.h -asan.o: $(hdrdir)/ruby/backward/2/stdalign.h -asan.o: $(hdrdir)/ruby/backward/2/stdarg.h -asan.o: $(hdrdir)/ruby/defines.h -asan.o: $(hdrdir)/ruby/intern.h -asan.o: $(hdrdir)/ruby/internal/abi.h -asan.o: $(hdrdir)/ruby/internal/anyargs.h -asan.o: $(hdrdir)/ruby/internal/arithmetic.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/char.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/double.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/int.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/long.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/short.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h -asan.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h -asan.o: $(hdrdir)/ruby/internal/assume.h -asan.o: $(hdrdir)/ruby/internal/attr/alloc_size.h -asan.o: $(hdrdir)/ruby/internal/attr/artificial.h -asan.o: $(hdrdir)/ruby/internal/attr/cold.h -asan.o: $(hdrdir)/ruby/internal/attr/const.h -asan.o: $(hdrdir)/ruby/internal/attr/constexpr.h -asan.o: $(hdrdir)/ruby/internal/attr/deprecated.h -asan.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h -asan.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h -asan.o: $(hdrdir)/ruby/internal/attr/error.h -asan.o: $(hdrdir)/ruby/internal/attr/flag_enum.h -asan.o: $(hdrdir)/ruby/internal/attr/forceinline.h -asan.o: $(hdrdir)/ruby/internal/attr/format.h -asan.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h -asan.o: $(hdrdir)/ruby/internal/attr/noalias.h -asan.o: $(hdrdir)/ruby/internal/attr/nodiscard.h -asan.o: $(hdrdir)/ruby/internal/attr/noexcept.h -asan.o: $(hdrdir)/ruby/internal/attr/noinline.h -asan.o: $(hdrdir)/ruby/internal/attr/nonnull.h -asan.o: $(hdrdir)/ruby/internal/attr/noreturn.h -asan.o: $(hdrdir)/ruby/internal/attr/packed_struct.h -asan.o: $(hdrdir)/ruby/internal/attr/pure.h -asan.o: $(hdrdir)/ruby/internal/attr/restrict.h -asan.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h -asan.o: $(hdrdir)/ruby/internal/attr/warning.h -asan.o: $(hdrdir)/ruby/internal/attr/weakref.h -asan.o: $(hdrdir)/ruby/internal/cast.h -asan.o: $(hdrdir)/ruby/internal/compiler_is.h -asan.o: $(hdrdir)/ruby/internal/compiler_is/apple.h -asan.o: $(hdrdir)/ruby/internal/compiler_is/clang.h -asan.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h -asan.o: $(hdrdir)/ruby/internal/compiler_is/intel.h -asan.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h -asan.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h -asan.o: $(hdrdir)/ruby/internal/compiler_since.h -asan.o: $(hdrdir)/ruby/internal/config.h -asan.o: $(hdrdir)/ruby/internal/constant_p.h -asan.o: $(hdrdir)/ruby/internal/core.h -asan.o: $(hdrdir)/ruby/internal/core/rarray.h -asan.o: $(hdrdir)/ruby/internal/core/rbasic.h -asan.o: $(hdrdir)/ruby/internal/core/rbignum.h -asan.o: $(hdrdir)/ruby/internal/core/rclass.h -asan.o: $(hdrdir)/ruby/internal/core/rdata.h -asan.o: $(hdrdir)/ruby/internal/core/rfile.h -asan.o: $(hdrdir)/ruby/internal/core/rhash.h -asan.o: $(hdrdir)/ruby/internal/core/robject.h -asan.o: $(hdrdir)/ruby/internal/core/rregexp.h -asan.o: $(hdrdir)/ruby/internal/core/rstring.h -asan.o: $(hdrdir)/ruby/internal/core/rstruct.h -asan.o: $(hdrdir)/ruby/internal/core/rtypeddata.h -asan.o: $(hdrdir)/ruby/internal/ctype.h -asan.o: $(hdrdir)/ruby/internal/dllexport.h -asan.o: $(hdrdir)/ruby/internal/dosish.h -asan.o: $(hdrdir)/ruby/internal/error.h -asan.o: $(hdrdir)/ruby/internal/eval.h -asan.o: $(hdrdir)/ruby/internal/event.h -asan.o: $(hdrdir)/ruby/internal/fl_type.h -asan.o: $(hdrdir)/ruby/internal/gc.h -asan.o: $(hdrdir)/ruby/internal/glob.h -asan.o: $(hdrdir)/ruby/internal/globals.h -asan.o: $(hdrdir)/ruby/internal/has/attribute.h -asan.o: $(hdrdir)/ruby/internal/has/builtin.h -asan.o: $(hdrdir)/ruby/internal/has/c_attribute.h -asan.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h -asan.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h -asan.o: $(hdrdir)/ruby/internal/has/extension.h -asan.o: $(hdrdir)/ruby/internal/has/feature.h -asan.o: $(hdrdir)/ruby/internal/has/warning.h -asan.o: $(hdrdir)/ruby/internal/intern/array.h -asan.o: $(hdrdir)/ruby/internal/intern/bignum.h -asan.o: $(hdrdir)/ruby/internal/intern/class.h -asan.o: $(hdrdir)/ruby/internal/intern/compar.h -asan.o: $(hdrdir)/ruby/internal/intern/complex.h -asan.o: $(hdrdir)/ruby/internal/intern/cont.h -asan.o: $(hdrdir)/ruby/internal/intern/dir.h -asan.o: $(hdrdir)/ruby/internal/intern/enum.h -asan.o: $(hdrdir)/ruby/internal/intern/enumerator.h -asan.o: $(hdrdir)/ruby/internal/intern/error.h -asan.o: $(hdrdir)/ruby/internal/intern/eval.h -asan.o: $(hdrdir)/ruby/internal/intern/file.h -asan.o: $(hdrdir)/ruby/internal/intern/hash.h -asan.o: $(hdrdir)/ruby/internal/intern/io.h -asan.o: $(hdrdir)/ruby/internal/intern/load.h -asan.o: $(hdrdir)/ruby/internal/intern/marshal.h -asan.o: $(hdrdir)/ruby/internal/intern/numeric.h -asan.o: $(hdrdir)/ruby/internal/intern/object.h -asan.o: $(hdrdir)/ruby/internal/intern/parse.h -asan.o: $(hdrdir)/ruby/internal/intern/proc.h -asan.o: $(hdrdir)/ruby/internal/intern/process.h -asan.o: $(hdrdir)/ruby/internal/intern/random.h -asan.o: $(hdrdir)/ruby/internal/intern/range.h -asan.o: $(hdrdir)/ruby/internal/intern/rational.h -asan.o: $(hdrdir)/ruby/internal/intern/re.h -asan.o: $(hdrdir)/ruby/internal/intern/ruby.h -asan.o: $(hdrdir)/ruby/internal/intern/select.h -asan.o: $(hdrdir)/ruby/internal/intern/select/largesize.h -asan.o: $(hdrdir)/ruby/internal/intern/set.h -asan.o: $(hdrdir)/ruby/internal/intern/signal.h -asan.o: $(hdrdir)/ruby/internal/intern/sprintf.h -asan.o: $(hdrdir)/ruby/internal/intern/string.h -asan.o: $(hdrdir)/ruby/internal/intern/struct.h -asan.o: $(hdrdir)/ruby/internal/intern/thread.h -asan.o: $(hdrdir)/ruby/internal/intern/time.h -asan.o: $(hdrdir)/ruby/internal/intern/variable.h -asan.o: $(hdrdir)/ruby/internal/intern/vm.h -asan.o: $(hdrdir)/ruby/internal/interpreter.h -asan.o: $(hdrdir)/ruby/internal/iterator.h -asan.o: $(hdrdir)/ruby/internal/memory.h -asan.o: $(hdrdir)/ruby/internal/method.h -asan.o: $(hdrdir)/ruby/internal/module.h -asan.o: $(hdrdir)/ruby/internal/newobj.h -asan.o: $(hdrdir)/ruby/internal/scan_args.h -asan.o: $(hdrdir)/ruby/internal/special_consts.h -asan.o: $(hdrdir)/ruby/internal/static_assert.h -asan.o: $(hdrdir)/ruby/internal/stdalign.h -asan.o: $(hdrdir)/ruby/internal/stdbool.h -asan.o: $(hdrdir)/ruby/internal/stdckdint.h -asan.o: $(hdrdir)/ruby/internal/symbol.h -asan.o: $(hdrdir)/ruby/internal/value.h -asan.o: $(hdrdir)/ruby/internal/value_type.h -asan.o: $(hdrdir)/ruby/internal/variable.h -asan.o: $(hdrdir)/ruby/internal/warning_push.h -asan.o: $(hdrdir)/ruby/internal/xmalloc.h -asan.o: $(hdrdir)/ruby/missing.h -asan.o: $(hdrdir)/ruby/ruby.h -asan.o: $(hdrdir)/ruby/st.h -asan.o: $(hdrdir)/ruby/subst.h -asan.o: asan.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/asan/extconf.rb b/ext/-test-/asan/extconf.rb deleted file mode 100644 index ec02742b8145e4..00000000000000 --- a/ext/-test-/asan/extconf.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'mkmf' -create_makefile('-test-/asan') diff --git a/ext/-test-/sanitizers/depend b/ext/-test-/sanitizers/depend new file mode 100644 index 00000000000000..0e6e632803307e --- /dev/null +++ b/ext/-test-/sanitizers/depend @@ -0,0 +1,162 @@ +# AUTOGENERATED DEPENDENCIES START +sanitizers.o: $(RUBY_EXTCONF_H) +sanitizers.o: $(arch_hdrdir)/ruby/config.h +sanitizers.o: $(hdrdir)/ruby/assert.h +sanitizers.o: $(hdrdir)/ruby/backward.h +sanitizers.o: $(hdrdir)/ruby/backward/2/assume.h +sanitizers.o: $(hdrdir)/ruby/backward/2/attributes.h +sanitizers.o: $(hdrdir)/ruby/backward/2/bool.h +sanitizers.o: $(hdrdir)/ruby/backward/2/inttypes.h +sanitizers.o: $(hdrdir)/ruby/backward/2/limits.h +sanitizers.o: $(hdrdir)/ruby/backward/2/long_long.h +sanitizers.o: $(hdrdir)/ruby/backward/2/stdalign.h +sanitizers.o: $(hdrdir)/ruby/backward/2/stdarg.h +sanitizers.o: $(hdrdir)/ruby/defines.h +sanitizers.o: $(hdrdir)/ruby/intern.h +sanitizers.o: $(hdrdir)/ruby/internal/abi.h +sanitizers.o: $(hdrdir)/ruby/internal/anyargs.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/char.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/double.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/int.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/long.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/short.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +sanitizers.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +sanitizers.o: $(hdrdir)/ruby/internal/assume.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/artificial.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/cold.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/const.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/constexpr.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/deprecated.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/error.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/forceinline.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/format.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/noalias.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/noexcept.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/noinline.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/nonnull.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/noreturn.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/pure.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/restrict.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/warning.h +sanitizers.o: $(hdrdir)/ruby/internal/attr/weakref.h +sanitizers.o: $(hdrdir)/ruby/internal/cast.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +sanitizers.o: $(hdrdir)/ruby/internal/compiler_since.h +sanitizers.o: $(hdrdir)/ruby/internal/config.h +sanitizers.o: $(hdrdir)/ruby/internal/constant_p.h +sanitizers.o: $(hdrdir)/ruby/internal/core.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rarray.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rbasic.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rbignum.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rclass.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rdata.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rfile.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rhash.h +sanitizers.o: $(hdrdir)/ruby/internal/core/robject.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rregexp.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rstring.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rstruct.h +sanitizers.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +sanitizers.o: $(hdrdir)/ruby/internal/ctype.h +sanitizers.o: $(hdrdir)/ruby/internal/dllexport.h +sanitizers.o: $(hdrdir)/ruby/internal/dosish.h +sanitizers.o: $(hdrdir)/ruby/internal/error.h +sanitizers.o: $(hdrdir)/ruby/internal/eval.h +sanitizers.o: $(hdrdir)/ruby/internal/event.h +sanitizers.o: $(hdrdir)/ruby/internal/fl_type.h +sanitizers.o: $(hdrdir)/ruby/internal/gc.h +sanitizers.o: $(hdrdir)/ruby/internal/glob.h +sanitizers.o: $(hdrdir)/ruby/internal/globals.h +sanitizers.o: $(hdrdir)/ruby/internal/has/attribute.h +sanitizers.o: $(hdrdir)/ruby/internal/has/builtin.h +sanitizers.o: $(hdrdir)/ruby/internal/has/c_attribute.h +sanitizers.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +sanitizers.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +sanitizers.o: $(hdrdir)/ruby/internal/has/extension.h +sanitizers.o: $(hdrdir)/ruby/internal/has/feature.h +sanitizers.o: $(hdrdir)/ruby/internal/has/warning.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/array.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/bignum.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/class.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/compar.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/complex.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/cont.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/dir.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/enum.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/enumerator.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/error.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/eval.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/file.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/hash.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/io.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/load.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/marshal.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/numeric.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/object.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/parse.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/proc.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/process.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/random.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/range.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/rational.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/re.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/ruby.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/select.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/set.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/signal.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/sprintf.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/string.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/struct.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/thread.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/time.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/variable.h +sanitizers.o: $(hdrdir)/ruby/internal/intern/vm.h +sanitizers.o: $(hdrdir)/ruby/internal/interpreter.h +sanitizers.o: $(hdrdir)/ruby/internal/iterator.h +sanitizers.o: $(hdrdir)/ruby/internal/memory.h +sanitizers.o: $(hdrdir)/ruby/internal/method.h +sanitizers.o: $(hdrdir)/ruby/internal/module.h +sanitizers.o: $(hdrdir)/ruby/internal/newobj.h +sanitizers.o: $(hdrdir)/ruby/internal/scan_args.h +sanitizers.o: $(hdrdir)/ruby/internal/special_consts.h +sanitizers.o: $(hdrdir)/ruby/internal/static_assert.h +sanitizers.o: $(hdrdir)/ruby/internal/stdalign.h +sanitizers.o: $(hdrdir)/ruby/internal/stdbool.h +sanitizers.o: $(hdrdir)/ruby/internal/stdckdint.h +sanitizers.o: $(hdrdir)/ruby/internal/symbol.h +sanitizers.o: $(hdrdir)/ruby/internal/value.h +sanitizers.o: $(hdrdir)/ruby/internal/value_type.h +sanitizers.o: $(hdrdir)/ruby/internal/variable.h +sanitizers.o: $(hdrdir)/ruby/internal/warning_push.h +sanitizers.o: $(hdrdir)/ruby/internal/xmalloc.h +sanitizers.o: $(hdrdir)/ruby/missing.h +sanitizers.o: $(hdrdir)/ruby/ruby.h +sanitizers.o: $(hdrdir)/ruby/st.h +sanitizers.o: $(hdrdir)/ruby/subst.h +sanitizers.o: sanitizers.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/sanitizers/extconf.rb b/ext/-test-/sanitizers/extconf.rb new file mode 100644 index 00000000000000..c94a96de6c5218 --- /dev/null +++ b/ext/-test-/sanitizers/extconf.rb @@ -0,0 +1,2 @@ +require 'mkmf' +create_makefile('-test-/sanitizers') diff --git a/ext/-test-/sanitizers/sanitizers.c b/ext/-test-/sanitizers/sanitizers.c new file mode 100644 index 00000000000000..97a85b26ef3f83 --- /dev/null +++ b/ext/-test-/sanitizers/sanitizers.c @@ -0,0 +1,36 @@ +#include "ruby/ruby.h" + +static VALUE +asan_enabled_p(VALUE self) +{ +#if defined(__has_feature) + /* clang uses __has_feature for determining asan */ + return __has_feature(address_sanitizer) ? Qtrue : Qfalse; +#elif defined(__SANITIZE_ADDRESS__) + /* GCC sets __SANITIZE_ADDRESS__ for determining asan */ + return Qtrue; +#else + return Qfalse; +#endif +} + +static VALUE +lsan_enabled_p(VALUE self) +{ +#if defined(__has_feature) + /* clang uses __has_feature for determining LSAN */ + return __has_feature(leak_sanitizer) ? Qtrue : Qfalse; +#else + return Qfalse; +#endif +} + +void +Init_sanitizers(void) +{ + VALUE m = rb_define_module("Test"); + VALUE c = rb_define_class_under(m, "Sanitizers", rb_cObject); + rb_define_singleton_method(c, "asan_enabled?", asan_enabled_p, 0); + rb_define_singleton_method(c, "lsan_enabled?", lsan_enabled_p, 0); +} + diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index 7cea0b3a7027e7..3bbff73df8c070 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -58,6 +58,8 @@ def rlimit_exist? def test_rlimit_nofile return unless rlimit_exist? + omit "LSAN needs to open proc file" if Test::Sanitizers.lsan_enabled? + with_tmpchdir { File.write 's', <<-"End" # Too small RLIMIT_NOFILE, such as zero, causes problems. diff --git a/tool/lib/core_assertions.rb b/tool/lib/core_assertions.rb index cc4eb327d41106..fc7b9402843303 100644 --- a/tool/lib/core_assertions.rb +++ b/tool/lib/core_assertions.rb @@ -74,7 +74,7 @@ def message msg = nil, ending = nil, &default module CoreAssertions require_relative 'envutil' require 'pp' - require '-test-/asan' + require '-test-/sanitizers' nil.pretty_inspect @@ -159,7 +159,7 @@ def assert_no_memory_leak(args, prepare, code, message=nil, limit: 2.0, rss: fal pend 'assert_no_memory_leak may consider MJIT memory usage as leak' if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? # ASAN has the same problem - its shadow memory greatly increases memory usage # (plus asan has better ways to detect memory leaks than this assertion) - pend 'assert_no_memory_leak may consider ASAN memory usage as leak' if Test::ASAN.enabled? + pend 'assert_no_memory_leak may consider ASAN memory usage as leak' if Test::Sanitizers.asan_enabled? require_relative 'memory_status' raise Test::Unit::PendedError, "unsupported platform" unless defined?(Memory::Status) diff --git a/win32/configure.bat b/win32/configure.bat index 79384a87590067..8f767ede73256a 100755 --- a/win32/configure.bat +++ b/win32/configure.bat @@ -1,5 +1,5 @@ @echo off -@setlocal disabledelayedexpansion +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 set PROMPT=$E[94m+$E[m$S set witharg= diff --git a/win32/ifchange.bat b/win32/ifchange.bat index c7a57fad3583c4..f3fc9ea37c6203 100755 --- a/win32/ifchange.bat +++ b/win32/ifchange.bat @@ -1,6 +1,8 @@ @echo off :: usage: ifchange target temporary +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 + :: @set PROMPT=$T:$S for %%I in (%0) do set progname=%%~nI set timestamp= diff --git a/win32/install-buildtools.cmd b/win32/install-buildtools.cmd index 6ec147528000db..fbbe051f717b3e 100755 --- a/win32/install-buildtools.cmd +++ b/win32/install-buildtools.cmd @@ -1,5 +1,5 @@ @echo off -setlocal +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 set components=VC.Tools.x86.x64 VC.Redist.14.Latest CoreBuildTools set components=%components% Windows11SDK.26100 diff --git a/win32/lastrev.bat b/win32/lastrev.bat index f1c799f8976f2c..c4ce61e34abe82 100755 --- a/win32/lastrev.bat +++ b/win32/lastrev.bat @@ -1,5 +1,6 @@ -@setlocal @echo off +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 + if "%1" == "" (set gitdir=.) else (set gitdir=%1) set TZ=UTC for /f "usebackq tokens=1-3" %%I in ( diff --git a/win32/makedirs.bat b/win32/makedirs.bat index 13740d877809ed..8c06d94041c46b 100755 --- a/win32/makedirs.bat +++ b/win32/makedirs.bat @@ -1,3 +1,3 @@ @echo off -setlocal EnableExtensions +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 for %%I in (%*) do if not exist "%%~I/." mkdir "%%~I" diff --git a/win32/rm.bat b/win32/rm.bat index fefc0305458e57..500a4abe2e5562 100755 --- a/win32/rm.bat +++ b/win32/rm.bat @@ -1,5 +1,5 @@ @echo off -setlocal +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 set recursive= :optloop if "%1" == "-f" shift diff --git a/win32/rmdirs.bat b/win32/rmdirs.bat index 308b6483229353..c3d7b637b3ea2a 100755 --- a/win32/rmdirs.bat +++ b/win32/rmdirs.bat @@ -1,5 +1,5 @@ -::-*- batch -*- @echo off +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 if "%1" == "-p" shift :begin if "%1" == "" goto :end diff --git a/win32/rtname.cmd b/win32/rtname.cmd index 775e81681a5c6c..1ac008ebf06d3c 100755 --- a/win32/rtname.cmd +++ b/win32/rtname.cmd @@ -1,4 +1,5 @@ @echo off +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 set rt= set rtver= set osver= diff --git a/win32/vssetup.cmd b/win32/vssetup.cmd index c67bb0ad7c07de..2bbfbf1384f27e 100755 --- a/win32/vssetup.cmd +++ b/win32/vssetup.cmd @@ -1,4 +1,4 @@ -@setlocal ENABLEEXTENSIONS +@setlocal EnableExtensions DisableDelayedExpansion || exit /b -1 ::- do not `echo off` that affects the called batch files ::- check for vswhere