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 --- 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() { + }" + +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")}, ] -- 2.51.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
