util/lint/checkpatch: Update 'Check for compiler attributes'
This reduce difference with linux v5.18. Signed-off-by: Elyes Haouas <ehaouas@noos.fr> Change-Id: I817630321587dec515cd94aa7b73a17819526190 Reviewed-on: https://review.coreboot.org/c/coreboot/+/64604 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin L Roth <gaumless@tutanota.com>
This commit is contained in:
parent
a7b0d38964
commit
069dfe33a3
|
@ -6054,38 +6054,68 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# Check for __attribute__ packed, prefer __packed
|
||||
# Check for compiler attributes
|
||||
if ($realfile !~ m@\binclude/uapi/@ &&
|
||||
$line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
|
||||
WARN("PREFER_PACKED",
|
||||
"__packed is preferred over __attribute__((packed))\n" . $herecurr);
|
||||
}
|
||||
$rawline =~ /\b__attribute__\s*\(\s*($balanced_parens)\s*\)/) {
|
||||
my $attr = $1;
|
||||
$attr =~ s/\s*\(\s*(.*)\)\s*/$1/;
|
||||
|
||||
# Check for __attribute__ aligned, prefer __aligned
|
||||
if ($realfile !~ m@\binclude/uapi/@ &&
|
||||
$line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
|
||||
WARN("PREFER_ALIGNED",
|
||||
"__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr);
|
||||
}
|
||||
|
||||
# Check for __attribute__ format(printf, prefer __printf
|
||||
if ($realfile !~ m@\binclude/uapi/@ &&
|
||||
$line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf/) {
|
||||
if (WARN("PREFER_PRINTF",
|
||||
"__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf\s*,\s*(.*)\)\s*\)\s*\)/"__printf(" . trim($1) . ")"/ex;
|
||||
my %attr_list = (
|
||||
"alias" => "__alias",
|
||||
"aligned" => "__aligned",
|
||||
"always_inline" => "__always_inline",
|
||||
"assume_aligned" => "__assume_aligned",
|
||||
"cold" => "__cold",
|
||||
"const" => "__attribute_const__",
|
||||
"copy" => "__copy",
|
||||
"designated_init" => "__designated_init",
|
||||
"externally_visible" => "__visible",
|
||||
"format" => "printf|scanf",
|
||||
"gnu_inline" => "__gnu_inline",
|
||||
"malloc" => "__malloc",
|
||||
"mode" => "__mode",
|
||||
"no_caller_saved_registers" => "__no_caller_saved_registers",
|
||||
"noclone" => "__noclone",
|
||||
"noinline" => "noinline",
|
||||
"nonstring" => "__nonstring",
|
||||
"noreturn" => "__noreturn",
|
||||
"packed" => "__packed",
|
||||
"pure" => "__pure",
|
||||
"section" => "__section",
|
||||
"used" => "__used",
|
||||
"weak" => "__weak"
|
||||
);
|
||||
|
||||
while ($attr =~ /\s*(\w+)\s*(${balanced_parens})?/g) {
|
||||
my $orig_attr = $1;
|
||||
my $params = '';
|
||||
$params = $2 if defined($2);
|
||||
my $curr_attr = $orig_attr;
|
||||
$curr_attr =~ s/^[\s_]+|[\s_]+$//g;
|
||||
if (exists($attr_list{$curr_attr})) {
|
||||
my $new = $attr_list{$curr_attr};
|
||||
if ($curr_attr eq "format" && $params) {
|
||||
$params =~ /^\s*\(\s*(\w+)\s*,\s*(.*)/;
|
||||
$new = "__$1\($2";
|
||||
} else {
|
||||
$new = "$new$params";
|
||||
}
|
||||
if (WARN("PREFER_DEFINED_ATTRIBUTE_MACRO",
|
||||
"Prefer $new over __attribute__(($orig_attr$params))\n" . $herecurr) &&
|
||||
$fix) {
|
||||
my $remove = "\Q$orig_attr\E" . '\s*' . "\Q$params\E" . '(?:\s*,\s*)?';
|
||||
$fixed[$fixlinenr] =~ s/$remove//;
|
||||
$fixed[$fixlinenr] =~ s/\b__attribute__/$new __attribute__/;
|
||||
$fixed[$fixlinenr] =~ s/\}\Q$new\E/} $new/;
|
||||
$fixed[$fixlinenr] =~ s/ __attribute__\s*\(\s*\(\s*\)\s*\)//;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Check for __attribute__ format(scanf, prefer __scanf
|
||||
if ($realfile !~ m@\binclude/uapi/@ &&
|
||||
$line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\b/) {
|
||||
if (WARN("PREFER_SCANF",
|
||||
"__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\s*,\s*(.*)\)\s*\)\s*\)/"__scanf(" . trim($1) . ")"/ex;
|
||||
# Check for __attribute__ unused, prefer __always_unused or __maybe_unused
|
||||
if ($attr =~ /^_*unused/) {
|
||||
WARN("PREFER_DEFINED_ATTRIBUTE_MACRO",
|
||||
"__always_unused or __maybe_unused is preferred over __attribute__((__unused__))\n" . $herecurr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue