]> granicus.if.org Git - vim/commitdiff
patch 8.2.3573: cannot decide whether to skip test that fails with 64 bit v8.2.3573
authorBram Moolenaar <Bram@vim.org>
Tue, 2 Nov 2021 21:39:49 +0000 (21:39 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 2 Nov 2021 21:39:49 +0000 (21:39 +0000)
Problem:    Cannot decide whether to skip test that fails with 64 bit ints.
            (closes #9072)
Solution:   Add v:sizeofint, v:sizeoflong and v:sizeofpointer.  Improve the
            check for multiply overflow.

src/evalvars.c
src/register.c
src/testdir/test_put.vim
src/version.c
src/vim.h

index 08736dd8c7a04fdb7516c750b4bbab8ca3d0d185..6851eef9b7af5d348d5e438334511a82f04037d8 100644 (file)
@@ -150,6 +150,9 @@ static struct vimvar
     {VV_NAME("collate",                 VAR_STRING), VV_RO},
     {VV_NAME("exiting",                 VAR_SPECIAL), VV_RO},
     {VV_NAME("colornames",       VAR_DICT), VV_RO},
+    {VV_NAME("sizeofint",       VAR_NUMBER), VV_RO},
+    {VV_NAME("sizeoflong",      VAR_NUMBER), VV_RO},
+    {VV_NAME("sizeofpointer",   VAR_NUMBER), VV_RO},
 };
 
 // shorthand
@@ -234,6 +237,9 @@ evalvars_init(void)
     set_vim_var_nr(VV_NUMBERMAX, VARNUM_MAX);
     set_vim_var_nr(VV_NUMBERMIN, VARNUM_MIN);
     set_vim_var_nr(VV_NUMBERSIZE, sizeof(varnumber_T) * 8);
+    set_vim_var_nr(VV_SIZEOFINT, sizeof(int));
+    set_vim_var_nr(VV_SIZEOFLONG, sizeof(long));
+    set_vim_var_nr(VV_SIZEOFPOINTER, sizeof(char *));
 
     set_vim_var_nr(VV_TYPE_NUMBER,  VAR_TYPE_NUMBER);
     set_vim_var_nr(VV_TYPE_STRING,  VAR_TYPE_STRING);
index 522500ce1d1290144be734e89248fb18727ca640..29ae26bd4864661b430a27577f944713e39efdee 100644 (file)
@@ -2014,7 +2014,8 @@ do_put(
                long multlen = count * yanklen;
 
                totlen = multlen;
-               if (totlen != multlen)
+               if (totlen != multlen || totlen / count != yanklen
+                                                 || totlen / yanklen != count)
                {
                    emsg(_(e_resulting_text_too_long));
                    break;
index 921d3b21543d0f4399564a41c88d5f24700143dd..82379dc052d701e28cd9d14e0a7bd7d1e39e59a9 100644 (file)
@@ -149,13 +149,6 @@ func Test_p_with_count_leaves_mark_at_end()
 endfunc
 
 func Test_very_large_count()
-  " FIXME: should actually check if sizeof(int) == sizeof(long)
-  CheckNotMSWindows
-
-  if v:numbersize != 64
-    throw 'Skipped: only works with 64 bit numbers'
-  endif
-
   new
   let @" = 'x'
   call assert_fails('norm 44444444444444p', 'E1240:')
index b7f64c76e19582385c445c62abc2760e6bc3cd2d..f60263f0278599542e40ebb1a1d5464bd3608fbf 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3573,
 /**/
     3572,
 /**/
index 43fb8e052453a50daef13e4a20fc0b5de12b5e8d..22451c7e479c6cf15ca67afd5135e5580fcf16a3 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -2060,7 +2060,10 @@ typedef int sock_T;
 #define VV_COLLATE      97
 #define VV_EXITING     98
 #define VV_COLORNAMES   99
-#define VV_LEN         100     // number of v: vars
+#define VV_SIZEOFINT   100
+#define VV_SIZEOFLONG  101
+#define VV_SIZEOFPOINTER 102
+#define VV_LEN         103     // number of v: vars
 
 // used for v_number in VAR_BOOL and VAR_SPECIAL
 #define VVAL_FALSE     0L      // VAR_BOOL