mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 11:34:50 +08:00
3afb532b19
Skip patches generation for structs with a single field.
Changing a zero-length array to a flexible array member in a struct
with no named members breaks the compilation. However, reporting
such cases is still valuable, e.g. commit 637464c59e
("ACPI: NFIT: Fix flexible_array.cocci warnings").
Signed-off-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Julia Lawall <julia.lawall@inria.fr>
108 lines
1.8 KiB
Plaintext
108 lines
1.8 KiB
Plaintext
// SPDX-License-Identifier: GPL-2.0-only
|
|
///
|
|
/// Zero-length and one-element arrays are deprecated, see
|
|
/// Documentation/process/deprecated.rst
|
|
/// Flexible-array members should be used instead.
|
|
///
|
|
//
|
|
// Confidence: High
|
|
// Copyright: (C) 2020 Denis Efremov ISPRAS.
|
|
// Comments:
|
|
// Options: --no-includes --include-headers
|
|
|
|
virtual context
|
|
virtual report
|
|
virtual org
|
|
virtual patch
|
|
|
|
@initialize:python@
|
|
@@
|
|
def relevant(positions):
|
|
for p in positions:
|
|
if "uapi" in p.file:
|
|
return False
|
|
return True
|
|
|
|
@r depends on !patch@
|
|
identifier name, array;
|
|
type T;
|
|
position p : script:python() { relevant(p) };
|
|
@@
|
|
|
|
(
|
|
struct name {
|
|
...
|
|
* T array@p[\(0\|1\)];
|
|
};
|
|
|
|
|
struct {
|
|
...
|
|
* T array@p[\(0\|1\)];
|
|
};
|
|
|
|
|
union name {
|
|
...
|
|
* T array@p[\(0\|1\)];
|
|
};
|
|
|
|
|
union {
|
|
...
|
|
* T array@p[\(0\|1\)];
|
|
};
|
|
)
|
|
|
|
@only_field depends on patch@
|
|
identifier name, array;
|
|
type T;
|
|
position q;
|
|
@@
|
|
|
|
(
|
|
struct name {@q
|
|
T array[0];
|
|
};
|
|
|
|
|
struct {@q
|
|
T array[0];
|
|
};
|
|
)
|
|
|
|
@depends on patch@
|
|
identifier name, array;
|
|
type T;
|
|
position p : script:python() { relevant(p) };
|
|
// position @q with rule "only_field" simplifies
|
|
// handling of bitfields, arrays, etc.
|
|
position q != only_field.q;
|
|
@@
|
|
|
|
(
|
|
struct name {@q
|
|
...
|
|
T array@p[
|
|
- 0
|
|
];
|
|
};
|
|
|
|
|
struct {@q
|
|
...
|
|
T array@p[
|
|
- 0
|
|
];
|
|
};
|
|
)
|
|
|
|
@script: python depends on report@
|
|
p << r.p;
|
|
@@
|
|
|
|
msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
|
|
coccilib.report.print_report(p[0], msg)
|
|
|
|
@script: python depends on org@
|
|
p << r.p;
|
|
@@
|
|
|
|
msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
|
|
coccilib.org.print_todo(p[0], msg)
|