The gcc extension for binary constants that start with 0b
is only supported with gcc version 4.3 or higher.

The kernel can still be compiled with earlier versions of
gcc, so have checkpatch emit a warning for these constants.

Restructure checkpatch's constant finding code a bit to
support finding these binary constants.

Suggested-by: Andrew Morton <[email protected]>
Signed-off-by: Joe Perches <[email protected]>
---
 scripts/checkpatch.pl | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index f1aad19..517da26 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -230,11 +230,15 @@ our $Inline       = qr{inline|__always_inline|noinline};
 our $Member    = qr{->$Ident|\.$Ident|\[[^]]*\]};
 our $Lval      = qr{$Ident(?:$Member)*};
 
+our $Int_type  = qr{(?i)llu|ull|ll|lu|ul|l|u};
+our $Binary    = qr{(?i)0b[01]+$Int_type?};
+our $Hex       = qr{(?i)0x[0-9a-f]+$Int_type?};
+our $Int       = qr{[0-9]+$Int_type?};
 our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?};
 our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?};
 our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?};
 our $Float     = qr{$Float_hex|$Float_dec|$Float_int};
-our $Constant  = qr{$Float|(?i)(?:0x[0-9a-f]+|[0-9]+)[ul]*};
+our $Constant  = qr{$Float|$Binary|$Hex|$Int};
 our $Assignment        = qr{\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=};
 our $Compare    = qr{<=|>=|==|!=|<|>};
 our $Operators = qr{
@@ -2934,9 +2938,17 @@ sub process {
                        }
                }
 
-#CamelCase
+#Specific variable tests
                while ($line =~ m{($Constant|$Lval)}g) {
                        my $var = $1;
+
+#gcc binary extension
+                       if ($var =~ /^$Binary$/) {
+                               WARN("GCC_BINARY_CONSTANT",
+                                    "Avoid gcc v4.3+ binary constant 
extension: <$var>\n" . $herecurr);
+                       }
+
+#CamelCase
                        if ($var !~ /$Constant/ &&
                            $var =~ /[A-Z][a-z]|[a-z][A-Z]/ &&
                            $var !~ 
/"^(?:Clear|Set|TestClear|TestSet|)Page[A-Z]/ &&
-- 
1.8.1.2.459.gbcd45b4.dirty

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to