summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2025-10-08 16:45:24 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2025-10-08 16:45:24 -0700
commit846bb760756a3bf1ab12d56d8909e104f16e6940 (patch)
treecc450223320ec97912e23bf85f39f2bbf3b4e1b9
parent9b5d6505ef0fbb27417a5b8face120dec73bacf2 (diff)
merge revision(s) bbf1130f918ca26e33aba4711ccf99a8083517ea, 43dbb9a93f4de3f1170d7d18641c30e81cc08365, 2bb6fe3854e2a4854bb89bfce4eaaea9d848fd1b, 7c9dd0ecff61153b96473c6c51d5582e809da489: [Backport #21629]
[PATCH] Add `RBIMPL_ATTR_NONSTRING_ARRAY()` macro for GCC 15 [PATCH] [Bug #21629] Enable `nonstring` attribute on clang 21 [PATCH] [Bug #21629] Initialize `struct RString` [PATCH] [Bug #21629] Initialize `struct RArray`
-rw-r--r--enc/trans/iso2022.trans2
-rw-r--r--include/ruby/internal/attr/nonstring.h8
-rw-r--r--symbol.c2
-rw-r--r--version.h2
-rw-r--r--vm_insnhelper.c4
5 files changed, 13 insertions, 5 deletions
diff --git a/enc/trans/iso2022.trans b/enc/trans/iso2022.trans
index b0c635d574..bc42bbc19c 100644
--- a/enc/trans/iso2022.trans
+++ b/enc/trans/iso2022.trans
@@ -437,7 +437,7 @@ rb_cp50221_encoder = {
/* JIS0201 to JIS0208 conversion table */
enum {tbl0208_num = 0xDF - 0xA1 + 1};
-RBIMPL_ATTR_NONSTRING() static const char tbl0208[tbl0208_num][2] = {
+RBIMPL_ATTR_NONSTRING_ARRAY() static const char tbl0208[tbl0208_num][2] = {
"\x21\x23", "\x21\x56", "\x21\x57", "\x21\x22",
"\x21\x26", "\x25\x72", "\x25\x21", "\x25\x23",
"\x25\x25", "\x25\x27", "\x25\x29", "\x25\x63",
diff --git a/include/ruby/internal/attr/nonstring.h b/include/ruby/internal/attr/nonstring.h
index de26e926d4..5ad6ef2a86 100644
--- a/include/ruby/internal/attr/nonstring.h
+++ b/include/ruby/internal/attr/nonstring.h
@@ -25,8 +25,16 @@
/** Wraps (or simulates) `__attribute__((nonstring))` */
#if RBIMPL_HAS_ATTRIBUTE(nonstring)
# define RBIMPL_ATTR_NONSTRING() __attribute__((nonstring))
+# if RBIMPL_COMPILER_SINCE(GCC, 15, 0, 0)
+# define RBIMPL_ATTR_NONSTRING_ARRAY() RBIMPL_ATTR_NONSTRING()
+# elif RBIMPL_COMPILER_SINCE(Clang, 21, 0, 0)
+# define RBIMPL_ATTR_NONSTRING_ARRAY() RBIMPL_ATTR_NONSTRING()
+# else
+# define RBIMPL_ATTR_NONSTRING_ARRAY() /* void */
+# endif
#else
# define RBIMPL_ATTR_NONSTRING() /* void */
+# define RBIMPL_ATTR_NONSTRING_ARRAY() /* void */
#endif
#endif /* RBIMPL_ATTR_NONSTRING_H */
diff --git a/symbol.c b/symbol.c
index 0878928a04..1b6a297aeb 100644
--- a/symbol.c
+++ b/symbol.c
@@ -156,7 +156,7 @@ rb_id_attrset(ID id)
/* make new symbol and ID */
if (!(str = lookup_id_str(id))) {
- RBIMPL_ATTR_NONSTRING() static const char id_types[][8] = {
+ RBIMPL_ATTR_NONSTRING_ARRAY() static const char id_types[][8] = {
"local",
"instance",
"invalid",
diff --git a/version.h b/version.h
index 6f52a40f77..b65f5c1a70 100644
--- a/version.h
+++ b/version.h
@@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 7
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 58
+#define RUBY_PATCHLEVEL 59
#include "ruby/version.h"
#include "ruby/internal/abi.h"
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index ac08a00600..e056b7889c 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -6259,7 +6259,7 @@ static VALUE
vm_opt_newarray_include_p(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr, VALUE target)
{
if (BASIC_OP_UNREDEFINED_P(BOP_INCLUDE_P, ARRAY_REDEFINED_OP_FLAG)) {
- struct RArray fake_ary;
+ struct RArray fake_ary = {RBASIC_INIT};
VALUE ary = rb_setup_fake_ary(&fake_ary, ptr, num);
return rb_ary_includes(ary, target);
}
@@ -6279,7 +6279,7 @@ static VALUE
vm_opt_newarray_pack_buffer(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr, VALUE fmt, VALUE buffer)
{
if (BASIC_OP_UNREDEFINED_P(BOP_PACK, ARRAY_REDEFINED_OP_FLAG)) {
- struct RArray fake_ary;
+ struct RArray fake_ary = {RBASIC_INIT};
VALUE ary = rb_setup_fake_ary(&fake_ary, ptr, num);
return rb_ec_pack_ary(ec, ary, fmt, (UNDEF_P(buffer) ? Qnil : buffer));
}