Commit 77b8c0a8 authored by Joe Perches's avatar Joe Perches Committed by Linus Torvalds

checkpatch: warn on const char foo[] = "bar"; declarations

These declarations should generally be static const to avoid poor
compilation and runtime performance where compilers tend to initialize
the const declaration for every call instead of using .rodata for the
string.

Miscellanea:

 - Convert spaces to tabs for indentation in 2 adjacent checks

Link: http://lkml.kernel.org/r/10ea5f4b087dc911e41e187a4a2b5e79c7529aa3.camel@perches.comSigned-off-by: default avatarJoe Perches <joe@perches.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 05391772
...@@ -3890,14 +3890,23 @@ sub process { ...@@ -3890,14 +3890,23 @@ sub process {
WARN("STATIC_CONST_CHAR_ARRAY", WARN("STATIC_CONST_CHAR_ARRAY",
"static const char * array should probably be static const char * const\n" . "static const char * array should probably be static const char * const\n" .
$herecurr); $herecurr);
} }
# check for initialized const char arrays that should be static const
if ($line =~ /^\+\s*const\s+(char|unsigned\s+char|_*u8|(?:[us]_)?int8_t)\s+\w+\s*\[\s*(?:\w+\s*)?\]\s*=\s*"/) {
if (WARN("STATIC_CONST_CHAR_ARRAY",
"const array should probably be static const\n" . $herecurr) &&
$fix) {
$fixed[$fixlinenr] =~ s/(^.\s*)const\b/${1}static const/;
}
}
# check for static char foo[] = "bar" declarations. # check for static char foo[] = "bar" declarations.
if ($line =~ /\bstatic\s+char\s+(\w+)\s*\[\s*\]\s*=\s*"/) { if ($line =~ /\bstatic\s+char\s+(\w+)\s*\[\s*\]\s*=\s*"/) {
WARN("STATIC_CONST_CHAR_ARRAY", WARN("STATIC_CONST_CHAR_ARRAY",
"static char array declaration should probably be static const char\n" . "static char array declaration should probably be static const char\n" .
$herecurr); $herecurr);
} }
# check for const <foo> const where <foo> is not a pointer or array type # check for const <foo> const where <foo> is not a pointer or array type
if ($sline =~ /\bconst\s+($BasicType)\s+const\b/) { if ($sline =~ /\bconst\s+($BasicType)\s+const\b/) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment