On 23 Jun 2026, at 21:21, Aaron Conole wrote:

> Modern optimizing compilers will automatically choose to inline when
> it is appropriate for specific functions.  In fact, 'inline' is
> usually considered harmful[0] except in specific situations (such
> as using them in header files to prevent linker errors when the
> One Definition Rule needs to be relaxed).
>
> Signed-off-by: Aaron Conole <[email protected]>
>
> 0: 
> https://bylizhao.github.io/c/programming/2020/12/12/Static-inline-considered-harmful.html
> ---

Thanks for sorting this out Aaron!

See some comments below.

//Eelco

>  tests/checkpatch.at     | 70 +++++++++++++++++++++++++++++++++++++++++
>  utilities/checkpatch.py | 11 ++++---
>  2 files changed, 77 insertions(+), 4 deletions(-)
>
> diff --git a/tests/checkpatch.at b/tests/checkpatch.at
> index 7d80ffbed5..a1b915fa48 100755
> --- a/tests/checkpatch.at
> +++ b/tests/checkpatch.at
> @@ -750,6 +750,76 @@ try_checkpatch_c_file \
>  done
>  AT_CLEANUP
>
> +AT_SETUP([checkpatch - file contents checks - static inline in C files])
> +
> +try_checkpatch_c_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +    static inline bool foo() {
> +    }" \
> +   "ERROR: Using 'static inline' in a c-file.
> +    test.c:4:
> +    static inline bool foo() {"
> +
> +try_checkpatch_c_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +    static inline
> +    bool foo() {
> +    }" \
> +   "ERROR: Using 'static inline' in a c-file.
> +    test.c:4:
> +    static inline"
> +
> +try_checkpatch_c_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +    static   inline
> +    bool foo() {
> +    }" \
> +   "ERROR: Using 'static inline' in a c-file.
> +    test.c:4:
> +    static   inline"
> +
> +try_checkpatch_c_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +        static inline
> +        bool foo() {
> +        }" \
> +   "ERROR: Using 'static inline' in a c-file.
> +    test.c:4:
> +        static inline"
> +
> +try_checkpatch_c_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +    static void inliner() {
> +    }"
> +
> +try_checkpatch_c_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +    static void inliner() {
> +    }"
> +
> +dnl This is to confirm that filename selection works
> +try_checkpatch_py_file \
> +   "#include <foo.h>
> +    #include <bar.h>
> +
> +    static inline bool foo() {
> +    }"
> +

nit; Lots of tests ;) but if static and inline are split it fails:

 +try_checkpatch_c_file \
 +   "#include <foo.h>
 +    #include <bar.h>
 +
 +    static
 +    inline
 +    bool foo() {
 +    }" \
 +   "ERROR: Using 'static inline' in a c-file.
 +    test.c:4:
 +    static inline"

> +AT_CLEANUP
> +
> +
>  AT_SETUP([checkpatch - spelling checks])
>  AT_SKIP_IF([! $PYTHON3 -c 'import enchant' >/dev/null 2>&1])
>
> diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
> index 113c371098..66a9a86769 100755
> --- a/utilities/checkpatch.py
> +++ b/utilities/checkpatch.py
> @@ -162,6 +162,7 @@ __regex_if_macros = re.compile(r'^ +(%s) 
> \([\S](?:[\s\S]*?[\S])?\) { +\\' %
>                                 __parenthesized_constructs)
>  __regex_nonascii_characters = re.compile("[^\u0000-\u007f]")
>  __regex_efgrep = re.compile(r'.*[ef]grep.*$')
> +__regex_static_inline_c_file = re.compile(r'^\s*static\s+inline')
>
>  skip_leading_whitespace_check = False
>  skip_trailing_whitespace_check = False
> @@ -629,6 +630,12 @@ checks = [
>       lambda: print_warning("Empty return followed by brace, consider 
> omitting")
>       },
>
> +    {'regex': r'(\.c)(\.in)?$', 'match_name': None,
> +     'check': lambda x: __regex_static_inline_c_file.search(x) is not None,
> +     'print':
> +     lambda: print_error("Using 'static inline' in a c-file.")
> +     },
> +
>      {'regex': r'(\.at|\.sh)$', 'match_name': None,
>       'check': lambda x: has_efgrep(x),
>       'print':
> @@ -637,10 +644,6 @@ checks = [
>      {'regex': 'AUTHORS.rst$', 'match_name': None,
>       'check': lambda x: update_missing_authors(x),
>       'print': None},
> -
> -    {'regex': None, 'match_name': None,
> -     'check': lambda x: 'ALLOW_EXPERIMENTAL_API' in x,
> -     'print': lambda: print_error("DPDK Experimental API is not allowed")},

Guess this should not have been deleted?

>  ]
>
>
> -- 
> 2.51.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to