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

Reply via email to