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>
		
			
				
	
	
		
			27 lines
		
	
	
		
			491 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			491 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 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;
 | |
|     ...
 | |
| };
 |