2018-04-03 19:04:10

by Heinrich Schuchardt

[permalink] [raw]
Subject: [BUG] checkpatch.pl: false positive: space prohibited before open square bracket

This patch leads to errors "space prohibited before open square
bracket '['" for the asm statement.

In the inline assembler statement the bracket is not used for an index.
Adding a space after a colon or a comma should be allowable.

Signed-off-by: Heinrich Schuchardt <[email protected]>
---
foo.c | 11 +++++++++++
1 file changed, 11 insertions(+)
create mode 100644 foo.c

diff --git a/foo.c b/foo.c
new file mode 100644
index 000000000000..7f0ed923f997
--- /dev/null
+++ b/foo.c
@@ -0,0 +1,11 @@
+static inline u32 deref(u32 *addr)
+{
+ int ret;
+
+ asm(
+ "ldr %[out], [%[in]]\n\t"
+ : [out] "=r" (ret)
+ : [in] "r" (addr)
+ );
+ return ret;
+}
--
2.16.3



2018-04-03 19:18:47

by Heinrich Schuchardt

[permalink] [raw]
Subject: [PATCH 1/1] checkpatch: allow space between colon and bracket

Allow a space between a colon and subsequent opening bracket.
This sequence may occur in inline assembler statements like

asm(
"ldr %[out], [%[in]]\n\t"
: [out] "=r" (ret)
: [in] "r" (addr)
);

Signed-off-by: Heinrich Schuchardt <[email protected]>
---
scripts/checkpatch.pl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index d2464002bb40..2cbab86e6d4c 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -4083,7 +4083,7 @@ sub process {
my ($where, $prefix) = ($-[1], $1);
if ($prefix !~ /$Type\s+$/ &&
($where != 0 || $prefix !~ /^.\s+$/) &&
- $prefix !~ /[{,]\s+$/) {
+ $prefix !~ /[{,:]\s+$/) {
if (ERROR("BRACKET_SPACE",
"space prohibited before open square bracket '['\n" . $herecurr) &&
$fix) {
--
2.16.3


2018-04-03 21:23:57

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH 1/1] checkpatch: allow space between colon and bracket

On Tue, 2018-04-03 at 21:16 +0200, Heinrich Schuchardt wrote:
> Allow a space between a colon and subsequent opening bracket.
> This sequence may occur in inline assembler statements like
>
> asm(
> "ldr %[out], [%[in]]\n\t"
> : [out] "=r" (ret)
> : [in] "r" (addr)
> );
>
> Signed-off-by: Heinrich Schuchardt <[email protected]>

I can't think of a valid c90 sequence that has a colon
before a bracket so

Acked-by: Joe Perches <[email protected]>

> ---
> scripts/checkpatch.pl | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index d2464002bb40..2cbab86e6d4c 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -4083,7 +4083,7 @@ sub process {
> my ($where, $prefix) = ($-[1], $1);
> if ($prefix !~ /$Type\s+$/ &&
> ($where != 0 || $prefix !~ /^.\s+$/) &&
> - $prefix !~ /[{,]\s+$/) {
> + $prefix !~ /[{,:]\s+$/) {
> if (ERROR("BRACKET_SPACE",
> "space prohibited before open square bracket '['\n" . $herecurr) &&
> $fix) {