diff options
author | Nobuyoshi Nakada <[email protected]> | 2021-09-27 14:47:52 +0900 |
---|---|---|
committer | GitHub <[email protected]> | 2021-09-27 14:47:52 +0900 |
commit | f7ffe9dbdeb2bebb4c9155fc391f0bab198bfb51 (patch) | |
tree | 24e273a2d906f2c40279f80eef46cbc6a36133fa | |
parent | 582602d142c7ea2b21cd7539c09976b078d7bbe9 (diff) |
Introduce `RBIMPL_NONNULL_ARG` macro
Runtime assertion for the argument declared as non-null.
This macro does nothing if `RBIMPL_ATTR_NONNULL` is effective,
otherwise asserts that the argument is non-null.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4898
Merged-By: nobu <[email protected]>
-rw-r--r-- | enumerator.c | 8 | ||||
-rw-r--r-- | gc.c | 9 | ||||
-rw-r--r-- | include/ruby/internal/attr/nonnull.h | 2 |
3 files changed, 6 insertions, 13 deletions
diff --git a/enumerator.c b/enumerator.c index f359ab7bad..be469ee38b 100644 --- a/enumerator.c +++ b/enumerator.c @@ -3446,11 +3446,9 @@ rb_arithmetic_sequence_extract(VALUE obj, rb_arithmetic_sequence_components_t *c VALUE rb_arithmetic_sequence_beg_len_step(VALUE obj, long *begp, long *lenp, long *stepp, long len, int err) { -#if !RBIMPL_HAS_ATTRIBUTE(nonnull) - RUBY_ASSERT(begp != NULL); - RUBY_ASSERT(lenp != NULL); - RUBY_ASSERT(stepp != NULL); -#endif + RBIMPL_NONNULL_ARG(begp); + RBIMPL_NONNULL_ARG(lenp); + RBIMPL_NONNULL_ARG(stepp); rb_arithmetic_sequence_components_t aseq; if (!rb_arithmetic_sequence_extract(obj, &aseq)) { @@ -2767,21 +2767,14 @@ rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_ return obj; } -COMPILER_WARNING_PUSH -#if __has_warning("-Wnonnull-compare") || GCC_VERSION_SINCE(6, 1, 0) -COMPILER_WARNING_IGNORED(-Wnonnull-compare) -#endif - VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type) { - RUBY_ASSERT_ALWAYS(type); + RBIMPL_NONNULL_ARG(type); if (klass) rb_data_object_check(klass); return newobj_of(klass, T_DATA, (VALUE)type, (VALUE)1, (VALUE)datap, type->flags & RUBY_FL_WB_PROTECTED, sizeof(RVALUE)); } -COMPILER_WARNING_POP - VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type) { diff --git a/include/ruby/internal/attr/nonnull.h b/include/ruby/internal/attr/nonnull.h index 874f4236c0..778d5be208 100644 --- a/include/ruby/internal/attr/nonnull.h +++ b/include/ruby/internal/attr/nonnull.h @@ -25,8 +25,10 @@ /** Wraps (or simulates) `__attribute__((nonnull))` */ #if RBIMPL_HAS_ATTRIBUTE(nonnull) # define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list)) +# define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING #else # define RBIMPL_ATTR_NONNULL(list) /* void */ +# define RBIMPL_NONNULL_ARG(arg) RUBY_ASSERT(arg) #endif #endif /* RBIMPL_ATTR_NONNULL_H */ |