libabigail
abg-comp-filter.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2 // -*- Mode: C++ -*-
3 //
4 // Copyright (C) 2013-2023 Red Hat, Inc.
5 //
6 // Author: Dodji Seketeli
7 
8 /// @file
9 ///
10 /// This header declares filters for the diff trees resulting from
11 /// comparing ABI Corpora.
12 
13 #ifndef __ABG_COMP_FILTER_H__
14 #define __ABG_COMP_FILTER_H__
15 
16 #include "abg-comparison.h"
17 
18 namespace abigail
19 {
20 namespace comparison
21 {
22 /// Facilities to walk, categorize and possibly filter nodes of the
23 /// diff tree.
24 namespace filtering
25 {
26 
27 bool
28 has_harmless_name_change(const decl_base_sptr& f, const decl_base_sptr& s);
29 
30 bool union_diff_has_harmless_changes(const diff *d);
31 
32 bool
33 has_harmful_name_change(const decl_base_sptr& f, const decl_base_sptr& s);
34 
35 bool
36 has_harmful_name_change(const diff* dif);
37 
38 bool
39 has_virtual_mem_fn_change(const function_decl_diff* diff);
40 
41 bool
42 is_decl_only_class_with_size_change(const class_or_union& first,
43  const class_or_union& second);
44 
45 bool
46 is_decl_only_class_with_size_change(const class_or_union_sptr& first,
47  const class_or_union_sptr& second);
48 
49 bool
50 is_decl_only_class_with_size_change(const diff *diff);
51 
52 bool
53 has_decl_only_def_change(const decl_base_sptr& first,
54  const decl_base_sptr& second);
55 
56 bool
57 has_decl_only_def_change(const diff *d);
58 
59 bool
60 has_class_decl_only_def_change(const class_or_union_sptr& first,
61  const class_or_union_sptr& second);
62 
63 bool
65  const enum_type_decl_sptr& second);
66 
67 bool
68 has_class_decl_only_def_change(const diff *diff);
69 
70 bool
71 has_enum_decl_only_def_change(const diff *diff);
72 
73 bool
74 has_basic_type_name_change(const diff *);
75 
76 bool
78 
79 bool
81 
82 bool
83 is_mostly_distinct_diff(const diff *d);
84 
85 bool
87 
88 bool
90 
91 bool
92 has_data_member_replaced_by_anon_dm(const diff* diff);
93 
94 bool
96 
97 bool
99  const var_decl_sptr& var2);
100 
101 bool
103  const class_decl_sptr& second);
104 
105 bool
106 has_strict_fam_conversion(const diff *d);
107 
108 struct filter_base;
109 /// Convenience typedef for a shared pointer to filter_base
110 typedef shared_ptr<filter_base> filter_base_sptr;
111 /// Convenience typedef for a vector of filter_base_sptr
112 typedef std::vector<filter_base_sptr> filters;
113 
114 /// The base class for the diff tree node filter.
115 ///
116 /// It's intended to walk a tree of diff nodes and tag each relevant
117 /// name into one or several categories depending on well choosen
118 /// properties of the diff nodes.
120 {
121  friend void
123 }; //end class filter_base
124 
125 void
127 
128 void
130 
131 void
133 
134 class harmless_filter;
135 /// Convenience typedef for a shared pointer to a harmless_filter.
136 typedef shared_ptr<harmless_filter> harmless_filter_sptr;
137 
138 /// A filter that walks the diff nodes tree and tags relevant diff
139 /// nodes into categories considered to represent harmless changes.
141 {
142  virtual bool
143  visit(diff*, bool);
144 
145  virtual void
146  visit_end(diff*);
147 }; // end class harmless_filter
148 
150 /// A convenience typedef for a shared pointer to harmful_filter.
151 typedef shared_ptr<harmless_harmful_filter> harmful_harmless_filter_sptr;
152 
153 /// A filter that walks the diff nodes tree and tags relevant diff
154 /// nodes into categories considered to represent potentially harmless
155 /// or harmful changes.
157 {
158  virtual bool
159  visit(diff*, bool);
160 
161  virtual void
162  visit_end(diff*);
163 }; // end class harmless_harmful_filter
164 
165 } // end namespace filtering
166 } // end namespace comparison
167 } // end namespace abigail
168 
169 #endif // __ABG_COMP_FILTER_H__
The base class for the node visitors. These are the types used to visit each node traversed by the di...
The abstraction of a change between two ABI artifacts, a.k.a an artifact change.
A filter that walks the diff nodes tree and tags relevant diff nodes into categories considered to re...
A filter that walks the diff nodes tree and tags relevant diff nodes into categories considered to re...
bool has_basic_type_name_change(const diff *d)
Test if a diff node carries a basic type name change.
bool has_enum_decl_only_def_change(const enum_type_decl_sptr &first, const enum_type_decl_sptr &second)
Test if two enum_sptr are different just by the fact that one is decl-only and the other one is defin...
std::vector< filter_base_sptr > filters
Convenience typedef for a vector of filter_base_sptr.
bool has_class_decl_only_def_change(const class_or_union_sptr &first, const class_or_union_sptr &second)
Test if two class_or_union_sptr are different just by the fact that one is decl-only and the other on...
bool has_data_member_replaced_by_anon_dm(const diff *diff)
Test if a class_or_union_diff has a data member replaced by an anonymous data member in a harmless wa...
bool has_harmless_name_change(const decl_base_sptr &f, const decl_base_sptr &s)
Test if two decls represents a harmless name change.
shared_ptr< harmless_harmful_filter > harmful_harmless_filter_sptr
A convenience typedef for a shared pointer to harmful_filter.
bool is_var_1_dim_unknown_size_array_change(const var_decl_sptr &var1, const var_decl_sptr &var2)
Test if we are looking at two variables which types are both one dimension array, with one of them be...
bool is_decl_only_class_with_size_change(const class_or_union &first, const class_or_union &second)
Test if two classes that are decl-only (have the decl-only flag and carry no data members) but are di...
bool has_virtual_mem_fn_change(const function_decl_diff *diff)
Test if the function_decl_diff node has a change involving virtual member functions.
shared_ptr< filter_base > filter_base_sptr
Convenience typedef for a shared pointer to filter_base.
bool has_harmful_name_change(const decl_base_sptr &f, const decl_base_sptr &s)
Test if two decls represents a harmful name change.
bool has_class_or_union_type_name_change(const diff *d)
Test if a diff node carries a class or union type name change.
bool has_decl_only_def_change(const decl_base_sptr &first, const decl_base_sptr &second)
Test if two decl_base_sptr are different just by the fact that one is decl-only and the other one is ...
bool has_basic_or_class_type_name_change(const diff *d)
Test if a diff node carries a basic or class type name change.
shared_ptr< harmless_filter > harmless_filter_sptr
Convenience typedef for a shared pointer to a harmless_filter.
bool has_anonymous_data_member_change(const diff *d)
Test if a diff node carries a non-anonymous data member to anonymous data member change,...
void apply_filter(filter_base &filter, corpus_diff_sptr d)
Walk the diff sub-trees of a a corpus_diff and apply a filter to the nodes visted....
bool is_mostly_distinct_diff(const diff *d)
Test if a diff node carries a distinct type change or a pointer/reference/typedef to distinct type ch...
bool union_diff_has_harmless_changes(const diff *d)
Test if a union diff node does have changes that don't impact its size.
bool has_strict_fam_conversion(const class_decl_sptr &first, const class_decl_sptr &second)
Test if a class with a fake flexible data member got changed into a class with a real fexible data me...
shared_ptr< diff > diff_sptr
Convenience typedef for a shared_ptr for the diff class.
Definition: abg-fwd.h:76
shared_ptr< corpus_diff > corpus_diff_sptr
A convenience typedef for a shared pointer to corpus_diff.
shared_ptr< class_decl > class_decl_sptr
Convenience typedef for a shared pointer on a class_decl.
Definition: abg-fwd.h:191
shared_ptr< var_decl > var_decl_sptr
Convenience typedef for a shared pointer on a var_decl.
Definition: abg-fwd.h:254
shared_ptr< enum_type_decl > enum_type_decl_sptr
Convenience typedef for shared pointer to a enum_type_decl.
Definition: abg-fwd.h:173
Toplevel namespace for libabigail.
The base class for the diff tree node filter.
friend void apply_filter(filter_base_sptr f, diff_sptr deef)
Walk a diff sub-tree and apply a filter to the nodes visted. The filter categorizes each node,...