mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Use negative-sized array instead of zero-division
This commit is contained in:
parent
4c15b241f8
commit
fb9dd6182a
1 changed files with 7 additions and 21 deletions
|
@ -2336,13 +2336,9 @@ ERRORFUNC(("variable argument length doesn't match"), int rb_scan_args_length_mi
|
||||||
#if !defined(__has_attribute)
|
#if !defined(__has_attribute)
|
||||||
#define __has_attribute(x) 0
|
#define __has_attribute(x) 0
|
||||||
#endif
|
#endif
|
||||||
# if __has_attribute(diagnose_if)
|
|
||||||
# define rb_scan_args_count_end(fmt, ofs, vari) \
|
# define rb_scan_args_count_end(fmt, ofs, vari) \
|
||||||
(fmt[ofs] ? rb_scan_args_bad_format(fmt) : (vari))
|
(fmt[ofs] ? -1 : (vari))
|
||||||
# else
|
|
||||||
# define rb_scan_args_count_end(fmt, ofs, vari) \
|
|
||||||
((vari)/(!fmt[ofs] || rb_scan_args_bad_format(fmt)))
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define rb_scan_args_count_block(fmt, ofs, vari) \
|
# define rb_scan_args_count_block(fmt, ofs, vari) \
|
||||||
(fmt[ofs]!='&' ? \
|
(fmt[ofs]!='&' ? \
|
||||||
|
@ -2374,25 +2370,15 @@ ERRORFUNC(("variable argument length doesn't match"), int rb_scan_args_length_mi
|
||||||
rb_scan_args_count_var(fmt, 0, 0) : \
|
rb_scan_args_count_var(fmt, 0, 0) : \
|
||||||
rb_scan_args_count_opt(fmt, 1, fmt[0]-'0'))
|
rb_scan_args_count_opt(fmt, 1, fmt[0]-'0'))
|
||||||
|
|
||||||
# define rb_scan_args_verify_count(fmt, varc) \
|
|
||||||
((varc)/(rb_scan_args_count(fmt) == (varc) || \
|
|
||||||
rb_scan_args_length_mismatch(fmt, varc)))
|
|
||||||
|
|
||||||
# if defined(__has_attribute) && __has_attribute(diagnose_if)
|
# if defined(__has_attribute) && __has_attribute(diagnose_if)
|
||||||
# define rb_scan_args_verify(fmt, varc) (void)0
|
# define rb_scan_args_verify(fmt, varc) (void)0
|
||||||
# elif defined(__GNUC__)
|
|
||||||
# define rb_scan_args_verify(fmt, varc) \
|
|
||||||
(void)__extension__ ({ \
|
|
||||||
int verify; \
|
|
||||||
_Pragma("GCC diagnostic push"); \
|
|
||||||
_Pragma("GCC diagnostic ignored \"-Warray-bounds\""); \
|
|
||||||
verify = rb_scan_args_verify_count(fmt, varc); \
|
|
||||||
_Pragma("GCC diagnostic pop"); \
|
|
||||||
verify; \
|
|
||||||
})
|
|
||||||
# else
|
# else
|
||||||
# define rb_scan_args_verify(fmt, varc) \
|
# define rb_scan_args_verify(fmt, varc) \
|
||||||
(void)rb_scan_args_verify_count(fmt, varc)
|
(sizeof(char[1-2*(rb_scan_args_count(fmt)<0)])!=1 ? \
|
||||||
|
rb_scan_args_bad_format(fmt) : \
|
||||||
|
sizeof(char[1-2*(rb_scan_args_count(fmt)!=(varc))])!=1 ? \
|
||||||
|
rb_scan_args_length_mismatch(fmt, varc) : \
|
||||||
|
(int)(varc))
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
ALWAYS_INLINE(static int rb_scan_args_lead_p(const char *fmt));
|
ALWAYS_INLINE(static int rb_scan_args_lead_p(const char *fmt));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue