diff options
| author | Paolo Bonzini | 2020-10-07 18:23:56 +0200 |
|---|---|---|
| committer | Paolo Bonzini | 2020-10-12 17:50:22 +0200 |
| commit | 22fb6eb571387172f41878866f4438b6bae21f0e (patch) | |
| tree | 759479e8e9fd997d2a7791caf0e6278ff4cce91a /scripts/coccinelle | |
| parent | exec: split out non-softmmu-specific parts (diff) | |
| download | qemu-22fb6eb571387172f41878866f4438b6bae21f0e.tar.gz qemu-22fb6eb571387172f41878866f4438b6bae21f0e.tar.xz qemu-22fb6eb571387172f41878866f4438b6bae21f0e.zip | |
qom: fix objects with improper parent type
Some objects accidentally inherit ObjectClass instead of Object.
They compile silently but may crash after downcasting.
In this patch, we introduce a coccinelle script to find broken
declarations and fix them manually with proper base type.
Signed-off-by: Sergey Nizovtsev <snizovtsev@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'scripts/coccinelle')
| -rw-r--r-- | scripts/coccinelle/qom-parent-type.cocci | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/scripts/coccinelle/qom-parent-type.cocci b/scripts/coccinelle/qom-parent-type.cocci new file mode 100644 index 0000000000..9afb3edd97 --- /dev/null +++ b/scripts/coccinelle/qom-parent-type.cocci @@ -0,0 +1,26 @@ +// Highlight object declarations that don't look like object class but +// accidentally inherit from it. + +@match@ +identifier obj_t, fld; +type parent_t =~ ".*Class$"; +@@ +struct obj_t { + parent_t fld; + ... +}; + +@script:python filter depends on match@ +obj_t << match.obj_t; +@@ +is_class_obj = obj_t.endswith('Class') +cocci.include_match(not is_class_obj) + +@replacement depends on filter@ +identifier match.obj_t, match.fld; +type match.parent_t; +@@ +struct obj_t { +* parent_t fld; + ... +}; |
