]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1960: Make CI checks more strict v9.0.1960
authorYee Cheng Chin <ychin.git@gmail.com>
Sat, 30 Sep 2023 10:28:50 +0000 (12:28 +0200)
committerChristian Brabandt <cb@256bit.org>
Sat, 30 Sep 2023 10:32:37 +0000 (12:32 +0200)
Problem:  Make CI checks more strict
Solution: Add -Wstrict-prototypes -Wmissing-prototypes to CI,
          fix uncovered problems

Add -Wstrict-prototypes -Wmissing-prototypes warnings check to CI

Add two new warnings to CI, silence some Perl related build-warnings:

- `strict-prototypes` helps prevent declaring a function with an empty
  argument list, e.g. `int func()`. In C++, that's equivalent to `int
  func(void)`, but in C, that means a function that can take any number
  of arguments which is rarely what we want.

- `missing-prototypes` makes sure we use `static` for file-only internal
  functions. Non-static functions should have been declared on a
  prototype file.

- Add `no-compound-token-split-by-macro` to the perl cflags, since it
  throws out a bunch of perl-related warnings that make the CI log
  unnecessary verbose and hard to read. This seems to happen only with
  clang 12 and above.

When applying those changes, it already uncovered a few warnings, so fix
up the code as well (fix prototypes, make the code static, remove
shadowed var declaration)

GTK header needs to have #pragma warning suppressiong because GTK2
headers will warn on `-Wstrict-prototypes`, and it's included by gui.h
and so we can't just turn off the warning in a couple files.

closes: #13223
closes: #13226

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
ci/config.mk.clang-12.sed
ci/config.mk.sed
src/gui.h
src/if_perl.xs
src/if_py_both.h
src/if_python3.c
src/if_tcl.c
src/option.c
src/optionstr.c
src/version.c

index 810b723c7fa705d44cd3dacd24ed7a8f308fd932..6b59a18011d17d06fbf93491a4ca1f1894fd9e16 100644 (file)
@@ -1,3 +1,3 @@
 # Clang 12 (or Apple clang 13) and later makes a warning '-Wcompound-token-split-by-macro' enable by default.
-/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro/
+/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro -Wno-compound-token-split-by-macro/
 /^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=compound-token-split-by-macro/
index 06b6f73635a6d46cd283badec135cdc344e10f26..d88890193109f452a3dc549c047126cca534a54b 100644 (file)
@@ -1,3 +1,3 @@
-/^CFLAGS[[:blank:]]*=/s/$/ -Wall -Wextra -Wshadow -Werror -Wno-deprecated-declarations/
+/^CFLAGS[[:blank:]]*=/s/$/ -Wall -Wextra -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Werror -Wno-deprecated-declarations/
 /^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-function -Wno-shadow/
-/^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-parameter/
+/^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-parameter -Wno-strict-prototypes/
index aecba27d827fc9e17b1ffce7dc5e6264b344ba17..7bcbfa3538a9d50e7a9f390063e9f39c48fa35b1 100644 (file)
--- a/src/gui.h
+++ b/src/gui.h
 #  include "gui_gtk_vms.h"
 # endif // VMS
 # include <X11/Intrinsic.h>
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wstrict-prototypes"
 # include <gtk/gtk.h>
+# pragma GCC diagnostic pop
 #endif
 
 #ifdef FEAT_GUI_HAIKU
index a5b3f285b91d96c1d43f48e0e38334a681861f9d..180fce64c4395becb14475f4770e5bd95b15bbcf 100644 (file)
@@ -338,7 +338,7 @@ typedef int perl_key;
  */
 static HANDLE hPerlLib = NULL;
 
-static PerlInterpreter* (*perl_alloc)();
+static PerlInterpreter* (*perl_alloc)(void);
 static void (*perl_construct)(PerlInterpreter*);
 static void (*perl_destruct)(PerlInterpreter*);
 static void (*perl_free)(PerlInterpreter*);
index 4a32124a1ee801322f27c1abf55890db8c881ac5..06201711f699ab9aff7e6e660b15d120dd661bfe 100644 (file)
@@ -105,7 +105,7 @@ struct typeobject_wrapper {
 # define Py_TYPE_GET_TP_METHODS(type) ((PyMethodDef *)PyType_GetSlot(type, Py_tp_methods))
 
 // PyObject_NEW is not part of stable ABI, but PyObject_Malloc/Init are.
-PyObject* Vim_PyObject_New(PyTypeObject *type, size_t objsize)
+static PyObject* Vim_PyObject_New(PyTypeObject *type, size_t objsize)
 {
     PyObject *obj = (PyObject *)PyObject_Malloc(objsize);
     if (obj == NULL)
@@ -168,7 +168,7 @@ PyObject* Vim_PyObject_New(PyTypeObject *type, size_t objsize)
 #  define PyIter_Check(obj) (FALSE)
 # endif
 
-PyTypeObject* AddHeapType(struct typeobject_wrapper* type_object)
+static PyTypeObject* AddHeapType(struct typeobject_wrapper* type_object)
 {
     PyType_Spec type_spec;
     type_spec.name = type_object->tp_name;
@@ -254,7 +254,7 @@ PyTypeObject* AddHeapType(struct typeobject_wrapper* type_object)
 
 // Limited API does not provide PyRun_* functions. Need to implement manually
 // using PyCompile and PyEval.
-PyObject* Vim_PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
+static PyObject* Vim_PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
 {
     // Just pass "" for filename for now.
     PyObject* compiled = Py_CompileString(str, "", start);
@@ -265,7 +265,7 @@ PyObject* Vim_PyRun_String(const char *str, int start, PyObject *globals, PyObje
     Py_DECREF(compiled);
     return eval_result;
 }
-int Vim_PyRun_SimpleString(const char *str)
+static int Vim_PyRun_SimpleString(const char *str)
 {
     // This function emulates CPython's implementation.
     PyObject* m = PyImport_AddModule("__main__");
index a04cca31ae50876c86074c592d78ef684ed07129..2e116620ec61183fb57a2ce7c34a0f925328d7b3 100644 (file)
@@ -395,8 +395,8 @@ static int (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
 static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...);
 static PyObject* (*py3__PyObject_CallFunction_SizeT)(PyObject *, char *, ...);
 static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *);
-static PyObject* (*py3_PyEval_GetGlobals)();
-static PyObject* (*py3_PyEval_GetLocals)();
+static PyObject* (*py3_PyEval_GetGlobals)(void);
+static PyObject* (*py3_PyEval_GetLocals)(void);
 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
 static PyObject* (*py3_PyImport_ImportModule)(const char *);
 static PyObject* (*py3_PyImport_AddModule)(const char *);
@@ -1061,7 +1061,7 @@ static struct PyModuleDef vimmodule;
 // An alternative would be to convert all attribute string comparisons to use
 // PyUnicode_CompareWithASCIIString to skip having to extract the chars.
 static char py3_unicode_utf8_chars[20];
-char* PY_UNICODE_GET_UTF8_CHARS(PyObject* str)
+static char* PY_UNICODE_GET_UTF8_CHARS(PyObject* str)
 {
     py3_unicode_utf8_chars[0] = '\0';
     PyObject* bytes = PyUnicode_AsUTF8String(str);
index 9e7cd4c612d537602c9e34bbd40d5f2964bf457d..1882b41113b97b51183eda2ac3ab519cd7111d52 100644 (file)
@@ -180,7 +180,7 @@ typedef int HANDLE;
  * Declare HANDLE for tcl.dll and function pointers.
  */
 static HANDLE hTclLib = NULL;
-Tcl_Interp* (*dll_Tcl_CreateInterp)();
+Tcl_Interp* (*dll_Tcl_CreateInterp)(void);
 void (*dll_Tcl_FindExecutable)(const void *);
 
 /*
index 5140c392603f4e30737d952b7c09d439cd6703ad..d2096a5f0ddc55a494bcc670d1e4e1b3cdb02807 100644 (file)
@@ -7518,7 +7518,7 @@ set_context_in_set_cmd(
  * If 'test_only' is FALSE and 'fuzzy' is TRUE and if 'str' fuzzy matches
  * 'fuzzystr', then stores the match details in fuzmatch[idx] and returns TRUE.
  */
-    int
+    static int
 match_str(
        char_u          *str,
        regmatch_T      *regmatch,
@@ -8014,7 +8014,7 @@ ExpandSettingSubtract(
            // character as individual choice.
            for (char_u *flag = option_val; *flag != NUL; flag++)
            {
-               char_u *p = vim_strnsave(flag, 1);
+               p = vim_strnsave(flag, 1);
                if (p == NULL)
                    break;
                (*matches)[count++] = p;
index 010bec769f906e7071efe61018b55826bd8a39a9..88532ee5996b01fe5edb32653ee81ab928b426ef 100644 (file)
@@ -733,7 +733,7 @@ did_set_option_listflag(char_u *val, char_u *flags, char *errbuf)
 /*
  * Expand an option that accepts a list of string values.
  */
-    int
+    static int
 expand_set_opt_string(
        optexpand_T *args,
        char **values,
@@ -819,7 +819,7 @@ expand_set_opt_callback(expand_T *xp, int idx)
 /*
  * Expand an option with a callback that iterates through a list of possible names.
  */
-    int
+    static int
 expand_set_opt_generic(
        optexpand_T *args,
        char_u *((*func)(expand_T *, int)),
@@ -850,7 +850,7 @@ expand_set_opt_generic(
 /*
  * Expand an option which is a list of flags.
  */
-    int
+    static int
 expand_set_opt_listflag(
        optexpand_T *args,
        char_u *flags,
index e625ea674ba4b12ae37225e3324130df30f61a6c..9ae4835b728720ea6c6533bf4f363fa9eaa9265c 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1960,
 /**/
     1959,
 /**/