libabigail
abg-fwd.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 /// @file
7 
8 #ifndef __ABG_IRFWD_H__
9 #define __ABG_IRFWD_H__
10 
11 #include <stdint.h>
12 #include <cstddef>
13 #include <cstdlib>
14 #include <regex.h>
15 #include <list>
16 #include <memory>
17 #include <ostream>
18 #include <string>
19 #include <typeinfo>
20 #include <unordered_map>
21 #include <unordered_set>
22 #include <utility> // for std::rel_ops, at least.
23 #include <vector>
24 #include "abg-interned-str.h"
25 #include "abg-hash.h"
26 
27 /// Toplevel namespace for libabigail.
28 namespace abigail
29 {
30 /**
31  @mainpage libabigail
32 
33  This is the API documentation of the Application Binary
34  Interface Generic Analysis and Instrumentation Library, aka,
35  <em>libabigail</em>.
36 
37  Check out <a href="http://sourceware.org/libabigail"> the project
38  homepage</a>!
39 
40  The current libabigail source code can be browsed at
41  http://sourceware.org/git/gitweb.cgi?p=libabigail.git
42 
43  It can be checked out with:
44  <em>git clone git://sourceware.org/git/libabigail.git</em>
45 
46  The mailing list to send messages and patches to is
47  libabigail@sourceware.org.
48 
49  You can hang out with libabigail developers and users on irc at
50  irc://irc.oftc.net\#libabigail.
51 */
52 
53 // Inject some types.
54 using std::shared_ptr;
55 using std::weak_ptr;
56 using std::unordered_map;
57 using std::string;
58 using std::vector;
59 using std::unordered_set;
60 
61 typedef unordered_set<string> string_set_type;
62 
63 // Pull in relational operators.
64 using namespace std::rel_ops;
65 
66 namespace comparison
67 {
68 class diff_context;
69 
70 /// Convenience typedef for a shared pointer of @ref diff_context.
71 typedef shared_ptr<diff_context> diff_context_sptr;
72 
73 /// Convenience typedef for a weak pointer of @ref diff_context.
74 typedef weak_ptr<diff_context> diff_context_wptr;
75 
76 class diff;
77 
78 /// Convenience typedef for a shared_ptr for the @ref diff class
79 typedef shared_ptr<diff> diff_sptr;
80 
81 /// Convenience typedef for a weak_ptr for the @ref diff class
82 typedef weak_ptr<diff> diff_wptr;
83 }
84 
85 namespace regex
86 {
87 /// A convenience typedef for a shared pointer of regex_t.
88 typedef std::shared_ptr<regex_t> regex_t_sptr;
89 }// end namespace regex
90 
91 namespace ir
92 {
93 
94 // Forward declarations for corpus.
95 
96 class corpus;
97 typedef shared_ptr<corpus> corpus_sptr;
98 
99 class corpus_group;
100 typedef shared_ptr<corpus_group> corpus_group_sptr;
101 
102 // Forward declarations for ir.
103 
104 class ir_node_visitor;
105 
106 struct ir_traversable_base;
107 
108 /// Convenience typedef for a shared pointer to @ref
109 /// ir_traversable_base.
110 typedef shared_ptr<ir_traversable_base> ir_traversable_base_sptr;
111 
112 class environment;
113 /// Convenience typedef for a shared pointer to an @ref environment
114 typedef shared_ptr<environment> environment_sptr;
115 
116 class location;
117 class location_manager;
118 
119 class type_or_decl_base;
120 /// A convenience typedef for a shared_ptr to @ref type_or_decl_base.
121 typedef shared_ptr<type_or_decl_base> type_or_decl_base_sptr;
122 
123 class type_base;
124 
125 // Convenience typedef for a shared pointer on a @ref type_base
126 typedef shared_ptr<type_base> type_base_sptr;
127 
128 /// Convenience typedef for a weak pointer on a @ref type_base
129 typedef weak_ptr<type_base> type_base_wptr;
130 
131 /// Convenience typedef for a weak pointer to a @ref corpus.
132 typedef weak_ptr<corpus> corpus_wptr;
133 
134 class translation_unit;
135 /// Convenience typedef for a shared pointer on a @ref
136 /// translation_unit type.
137 typedef shared_ptr<translation_unit> translation_unit_sptr;
138 /// Convenience typedef for a map that associates a string to a
139 /// translation unit.
140 typedef unordered_map<string, translation_unit_sptr> string_tu_map_type;
141 
142 /// A convenience typedef for a vector of type_base_wptr.
143 typedef vector<type_base_wptr> type_base_wptrs_type;
144 
145 /// A convenience typedef for a map which key is an interned_string
146 /// and which value is a vector of type_base_wptr.
147 typedef unordered_map<interned_string,
150 
151 class decl_base;
152 
153 // Convenience typedef for a smart pointer on @ref decl_base.
154 typedef shared_ptr<decl_base> decl_base_sptr;
155 
156 class type_decl;
157 /// Convenience typedef for a shared pointer on a @ref type_decl.
158 typedef shared_ptr<type_decl> type_decl_sptr;
159 
160 
161 class typedef_decl;
162 
163 /// Convenience typedef for a shared pointer on a @ref typedef_decl.
164 typedef shared_ptr<typedef_decl> typedef_decl_sptr;
165 
166 /// Convenience typedef for a weak pointer on a @ref typedef_decl.
167 typedef weak_ptr<typedef_decl> typedef_decl_wptr;
168 
169 class enum_type_decl;
170 
171 /// Convenience typedef for shared pointer to a @ref enum_type_decl.
172 typedef shared_ptr<enum_type_decl> enum_type_decl_sptr;
173 
174 /// Convenience typedef for a vector of @ref enum_type_decl_sptr
175 typedef vector<enum_type_decl_sptr> enums_type;
176 
177 /// Convenience typedef for a weak pointer to a @ref decl_base.
178 typedef weak_ptr<decl_base> decl_base_wptr;
179 
180 class class_or_union;
181 
182 typedef shared_ptr<class_or_union> class_or_union_sptr;
183 typedef weak_ptr<class_or_union> class_or_union_wptr;
184 
185 class scope_type_decl;
186 
187 class class_decl;
188 
189 /// Convenience typedef for a shared pointer on a @ref class_decl
190 typedef shared_ptr<class_decl> class_decl_sptr;
191 
192 /// Convenience typedef for a vector of @ref class_decl_sptr
193 typedef vector<class_decl_sptr> classes_type;
194 
195 /// Convenience typedef for a vector of @ref class_or_union_sptr
196 typedef vector<class_or_union_sptr> classes_or_unions_type;
197 
198 /// Convenience typedef for a weak pointer on a @ref class_decl.
199 typedef weak_ptr<class_decl> class_decl_wptr;
200 
201 class union_decl;
202 
203 typedef shared_ptr<union_decl> union_decl_sptr;
204 
205 class function_type;
206 /// Convenience typedef for a shared pointer on a @ref function_type
207 typedef shared_ptr<function_type> function_type_sptr;
208 
209 /// Convenience typedef fo a vector of @ref function_type_sptr
210 typedef vector<function_type_sptr> function_types_type;
211 
212 /// Convenience typedef for a weak pointer on a @ref function_type
213 typedef weak_ptr<function_type> function_type_wptr;
214 
215 class method_type;
216 
217 /// Convenience typedef for shared pointer to @ref method_type.
218 typedef shared_ptr<method_type> method_type_sptr;
219 
220 class pointer_type_def;
221 
222 /// Convenience typedef for a shared pointer on a @ref pointer_type_def
223 typedef shared_ptr<pointer_type_def> pointer_type_def_sptr;
224 
225 class qualified_type_def;
226 
227 typedef shared_ptr<qualified_type_def> qualified_type_def_sptr;
228 
229 class reference_type_def;
230 
231 /// Convenience typedef for a shared pointer on a @ref reference_type_def
232 typedef shared_ptr<reference_type_def> reference_type_def_sptr;
233 
234 class array_type_def;
235 
236 /// Convenience typedef for a shared pointer on a @ref array_type_def
237 typedef shared_ptr<array_type_def> array_type_def_sptr;
238 
239 class subrange_type;
240 
241 class dm_context_rel;
242 
243 /// A convenience typedef for a shared pointer to dm_context_rel.
244 typedef shared_ptr<dm_context_rel> dm_context_rel_sptr;
245 
246 class var_decl;
247 
248 /// Convenience typedef for a shared pointer on a @ref var_decl
249 typedef shared_ptr<var_decl> var_decl_sptr;
250 
251 /// Convenience typedef for a weak pointer on a @ref var_decl
252 typedef weak_ptr<var_decl> var_decl_wptr;
253 
254 typedef unordered_map<interned_string,
255  var_decl*,
256  hash_interned_string> istring_var_decl_ptr_map_type;
257 
258 class scope_decl;
259 
260 /// Convenience typedef for a shared pointer on a @ref scope_decl.
261 typedef shared_ptr<scope_decl> scope_decl_sptr;
262 
263 class function_decl;
264 
265 /// Convenience typedef for a shared pointer on a @ref function_decl
266 typedef shared_ptr<function_decl> function_decl_sptr;
267 
268 typedef unordered_map<interned_string,
269  function_decl*,
270  hash_interned_string> istring_function_decl_ptr_map_type;
271 
272 class method_decl;
273 
274 typedef shared_ptr<method_decl> method_decl_sptr;
275 
276 class mem_fn_context_rel;
277 
278 /// A convenience typedef for a shared pointer to @ref
279 /// mem_fn_context_rel.
280 typedef shared_ptr<mem_fn_context_rel> mem_fn_context_rel_sptr;
281 
282 class namespace_decl;
283 
284 /// Convenience typedef for a shared pointer on namespace_decl.
285 typedef shared_ptr<namespace_decl> namespace_decl_sptr;
286 
287 class class_tdecl;
288 
289 /// Convenience typedef for a shared pointer on a @ref class_tdecl
290 typedef shared_ptr<class_tdecl> class_tdecl_sptr;
291 
292 class function_tdecl;
293 
294 /// Convenience typedef for a shared pointer on a @ref function_tdecl
295 typedef shared_ptr<function_tdecl> function_tdecl_sptr;
296 
297 class global_scope;
298 
299 /// Convenience typedef for shared pointer on @ref global_scope.
300 typedef shared_ptr<global_scope> global_scope_sptr;
301 
302 class node_visitor;
303 
304 class template_decl;
305 
306 /// Convenience typedef for a shared pointer to @ref template_decl
307 typedef shared_ptr<template_decl> template_decl_sptr;
308 
309 /// Convenience typedef for a weak pointer to template_decl
310 typedef weak_ptr<template_decl> template_decl_wptr;
311 
312 class template_parameter;
313 
314 /// Convenience typedef for shared pointer to template parameter
315 typedef shared_ptr<template_parameter> template_parameter_sptr;
316 
317 class non_type_tparameter;
318 
319 /// Convenience typedef for shared pointer to @ref
320 /// non_type_template_parameter
321 typedef shared_ptr<non_type_tparameter> non_type_tparameter_sptr;
322 
323 class type_tparameter;
324 
325 class template_tparameter;
326 
327 /// Convenience typedef for a shared_ptr to @ref template_tparameter.
328 typedef shared_ptr<template_tparameter> template_tparameter_sptr;
329 
330 /// Convenience typedef for a shared pointer to @ref type_tparameter.
331 typedef shared_ptr<type_tparameter> type_tparameter_sptr;
332 
333 class type_composition;
334 
336 typedef shared_ptr<member_function_template> member_function_template_sptr;
337 typedef vector<member_function_template_sptr> member_function_templates;
338 
340 typedef shared_ptr<member_class_template> member_class_template_sptr;
341 typedef vector<member_class_template_sptr> member_class_templates;
342 
343 /// Convenience typedef for shared pointer to type_composition
344 typedef shared_ptr<type_composition> type_composition_sptr;
345 
346 decl_base_sptr
347 add_decl_to_scope(decl_base_sptr, scope_decl*);
348 
349 decl_base_sptr
350 add_decl_to_scope(decl_base_sptr, const scope_decl_sptr&);
351 
352 const global_scope*
354 
355 const global_scope*
357 
358 const global_scope*
359 get_global_scope(const decl_base_sptr);
360 
363 
366 
368 get_translation_unit(const decl_base_sptr);
369 
370 bool
372 
373 const global_scope*
375 
376 bool
378 
379 bool
381 
382 bool
383 is_at_global_scope(const decl_base_sptr);
384 
385 bool
387 
389 is_at_class_scope(const decl_base_sptr);
390 
393 
396 
397 bool
398 is_at_template_scope(const decl_base_sptr);
399 
400 bool
401 is_template_parameter(const decl_base_sptr);
402 
405 
408 
409 bool
411 
412 decl_base*
413 is_decl(const type_or_decl_base*);
414 
415 decl_base_sptr
417 
418 decl_base*
420 
421 decl_base_sptr
423 
424 bool
425 is_type(const type_or_decl_base&);
426 
427 type_base*
428 is_type(const type_or_decl_base*);
429 
430 type_base_sptr
431 is_type(const type_or_decl_base_sptr& tod);
432 
433 bool
435 
436 bool
437 is_anonymous_type(const type_base_sptr&);
438 
439 const type_decl*
441 
444 
445 type_decl*
447 
450 
453 
454 const typedef_decl*
455 is_typedef(const type_base*);
456 
459 
461 is_compatible_with_enum_type(const type_base_sptr&);
462 
464 is_compatible_with_enum_type(const decl_base_sptr&);
465 
468 
469 const enum_type_decl*
471 
472 bool
474 
475 class_decl*
477 
480 
481 bool
483 
484 bool
485 is_declaration_only_class_or_union_type(const type_base_sptr&);
486 
489 
490 class_or_union_sptr
492 
493 bool
495 
496 union_decl*
498 
499 union_decl_sptr
501 
503 is_compatible_with_class_type(const type_base_sptr&);
504 
506 is_compatible_with_class_type(const decl_base_sptr&);
507 
510 
511 const pointer_type_def*
513 
516 
519 
520 const reference_type_def*
522 
525 
526 const type_base*
528 
529 const type_base*
531 
534 
535 qualified_type_def_sptr
537 
540 
543 
544 const function_type*
546 
549 
550 const method_type*
552 
555 
556 class_or_union_sptr
558 
559 class_or_union_sptr
560 look_through_decl_only_class(class_or_union_sptr);
561 
564 
567 
570 
571 decl_base_sptr
573 
574 decl_base*
576 
577 decl_base_sptr
578 look_through_decl_only(const decl_base_sptr&);
579 
580 var_decl*
582 
585 
587 is_namespace(const decl_base_sptr&);
588 
590 is_namespace(const decl_base*);
591 
592 bool
593 is_template_parm_composition_type(const decl_base_sptr);
594 
595 bool
596 is_template_decl(const decl_base_sptr);
597 
598 bool
599 is_function_template_pattern(const decl_base_sptr);
600 
601 
602 decl_base_sptr
603 insert_decl_into_scope(decl_base_sptr,
604  vector<decl_base_sptr >::iterator,
605  scope_decl*);
606 
607 decl_base_sptr
608 insert_decl_into_scope(decl_base_sptr,
609  vector<decl_base_sptr >::iterator,
611 
612 bool
613 has_scope(const decl_base&);
614 
615 bool
616 has_scope(const decl_base_sptr);
617 
618 bool
619 is_member_decl(const decl_base_sptr);
620 
621 bool
622 is_member_decl(const decl_base*);
623 
624 bool
625 is_member_decl(const decl_base&);
626 
627 scope_decl*
629 
631 is_scope_decl(const decl_base_sptr&);
632 
633 bool
634 is_member_type(const type_base_sptr&);
635 
636 bool
638 
639 bool
640 is_user_defined_type(const type_base_sptr&);
641 
642 void
643 remove_decl_from_scope(decl_base_sptr);
644 
645 bool
647 
648 bool
650 
651 bool
652 get_member_is_static(const decl_base_sptr&);
653 
654 void
656 
657 void
658 set_member_is_static(const decl_base_sptr&, bool);
659 
660 bool
661 is_data_member(const var_decl&);
662 
663 var_decl*
665 
666 bool
667 is_data_member(const var_decl*);
668 
671 
672 bool
674 
676 is_data_member(const decl_base_sptr&);
677 
678 var_decl*
679 is_data_member(const decl_base *);
680 
681 var_decl*
682 is_data_member(const decl_base *);
683 
684 const var_decl_sptr
685 get_next_data_member(const class_or_union_sptr&, const var_decl_sptr&);
686 
689 
692 
694 get_last_data_member(const class_or_union_sptr&);
695 
696 bool
698 
699 const var_decl*
701 
702 const var_decl*
704 
707 
709 is_anonymous_data_member(const decl_base_sptr&);
710 
713 
714 const var_decl*
716 
717 bool
719 
720 const var_decl_sptr
722 
725  const string&);
726 
729 
730 class_or_union_sptr
732 
733 class_or_union_sptr
735 
736 bool
738  const class_or_union& clazz);
739 
740 bool
742 
743 bool
745 
746 const class_or_union_sptr
748 
749 const class_or_union_sptr
751 
752 const class_or_union_sptr
754 
756 is_array_type(const type_or_decl_base* decl);
757 
760 
762 is_array_of_qualified_element(const type_base_sptr&);
763 
764 qualified_type_def_sptr
766 
768 is_typedef_of_array(const type_base_sptr&);
769 
770 void
772 
773 uint64_t
775 
776 uint64_t
778 
779 uint64_t
780 get_data_member_offset(const decl_base_sptr);
781 
782 uint64_t
784 
785 bool
787  const var_decl_sptr&,
788  uint64_t&);
789 
790 bool
791 get_next_data_member_offset(const class_or_union_sptr&,
792  const var_decl_sptr&,
793  uint64_t&);
794 
795 uint64_t
797 
798 void
800 
801 bool
803 
804 bool
806 
807 bool
809 
810 bool
812 
813 bool
815 
816 bool
818 
819 bool
821 
822 void
824 
825 void
827 
828 bool
830 
831 bool
833 
834 void
836 
837 void
839 
840 bool
842 
843 bool
845 
846 void
848 
849 void
851 
852 bool
854 
855 ssize_t
857 
858 ssize_t
860 
861 void
863  ssize_t s);
864 
865 void
867  ssize_t s);
868 
869 bool
871 
872 bool
874 
875 bool
877 
878 void
880 
881 void
883 
884 type_base_sptr
885 strip_typedef(const type_base_sptr);
886 
887 decl_base_sptr
888 strip_useless_const_qualification(const qualified_type_def_sptr t);
889 
890 void
891 strip_redundant_quals_from_underyling_types(const qualified_type_def_sptr&);
892 
893 type_base_sptr
894 peel_typedef_type(const type_base_sptr&);
895 
896 const type_base*
898 
899 type_base_sptr
900 peel_pointer_type(const type_base_sptr&);
901 
902 const type_base*
904 
905 type_base_sptr
906 peel_reference_type(const type_base_sptr&);
907 
908 const type_base*
910 
911 const type_base_sptr
912 peel_array_type(const type_base_sptr&);
913 
914 const type_base*
915 peel_array_type(const type_base*);
916 
917 const type_base*
919 
920 const type_base_sptr
921 peel_qualified_type(const type_base_sptr&);
922 
923 type_base*
925 
926 type_base_sptr
927 peel_qualified_or_typedef_type(const type_base_sptr &type);
928 
929 type_base_sptr
930 peel_typedef_pointer_or_reference_type(const type_base_sptr);
931 
932 type_base*
934 
935 type_base*
937  bool peel_qual_type);
938 
939 type_base*
941  bool peel_qualified_type = true);
942 
944 clone_array(const array_type_def_sptr& array);
945 
948 
949 qualified_type_def_sptr
950 clone_qualified_type(const qualified_type_def_sptr& t);
951 
952 type_base_sptr
953 clone_array_tree(const type_base_sptr t);
954 
955 string
956 get_name(const type_or_decl_base*, bool qualified = true);
957 
958 string
960  bool qualified = true);
961 
962 location
963 get_location(const type_base_sptr& type);
964 
965 location
966 get_location(const decl_base_sptr& decl);
967 
968 string
969 build_qualified_name(const scope_decl* scope, const string& name);
970 
971 string
972 build_qualified_name(const scope_decl* scope,
973  const type_base_sptr& type);
974 
975 scope_decl*
977 
978 scope_decl*
979 get_type_scope(const type_base_sptr&);
980 
982 get_type_name(const type_base_sptr&,
983  bool qualified = true,
984  bool internal = false);
985 
987 get_type_name(const type_base*,
988  bool qualified = true,
989  bool internal = false);
990 
992 get_type_name(const type_base&,
993  bool qualified = true,
994  bool internal = false);
995 
997 get_name_of_pointer_to_type(const type_base& pointed_to_type,
998  bool qualified = true,
999  bool internal = false);
1000 
1002 get_name_of_reference_to_type(const type_base& pointed_to_type,
1003  bool lvalue_reference = false,
1004  bool qualified = true,
1005  bool internal = false);
1006 
1009  bool internal = false);
1010 
1012 get_function_type_name(const function_type*, bool internal = false);
1013 
1015 get_function_type_name(const function_type&, bool internal = false);
1016 
1019 
1021 get_method_type_name(const method_type_sptr&, bool internal = false);
1022 
1024 get_method_type_name(const method_type*, bool internal = false);
1025 
1027 get_method_type_name(const method_type&, bool internal = false);
1028 
1029 string
1030 get_pretty_representation(const decl_base*, bool internal = false);
1031 
1032 string
1033 get_pretty_representation(const type_base*, bool internal = false);
1034 
1035 string
1036 get_pretty_representation(const type_or_decl_base*, bool internal = false);
1037 
1038 string
1040  bool internal = false);
1041 
1042 string
1043 get_pretty_representation(const decl_base_sptr&, bool internal = false);
1044 
1045 string
1046 get_pretty_representation(const type_base_sptr&, bool internal = false);
1047 
1048 string
1049 get_pretty_representation(const function_type&, bool internal = false);
1050 
1051 string
1052 get_pretty_representation(const function_type*, bool internal = false);
1053 
1054 string
1056  bool internal = false);
1057 
1058 string
1059 get_pretty_representation(const method_type&, bool internal = false);
1060 
1061 string
1062 get_pretty_representation(const method_type*, bool internal = false);
1063 
1064 string
1066  bool internal = false);
1067 
1068 string
1070  const string& indent,
1071  bool one_line,
1072  bool internal,
1073  bool qualified_name = true);
1074 
1075 string
1077  const string& indent,
1078  bool one_line,
1079  bool internal,
1080  bool qualified_name = true);
1081 
1082 string
1083 get_class_or_union_flat_representation(const class_or_union_sptr& cou,
1084  const string& indent,
1085  bool one_line,
1086  bool internal,
1087  bool qualified_name = true);
1088 
1089 string
1091 
1093 get_data_member(class_or_union *, const char*);
1094 
1096 get_data_member(type_base *clazz, const char* member_name);
1097 
1098 const location&
1100 
1101 const location&
1103 
1105 debug(const type_or_decl_base* artifact);
1106 
1107 type_base*
1108 debug(const type_base* artifact);
1109 
1110 decl_base*
1111 debug(const decl_base* artifact);
1112 
1113 bool
1115 
1116 void
1117 debug_comp_stack(const environment& env);
1118 
1119 bool
1121 
1122 const decl_base*
1124 
1125 decl_base*
1127 
1128 decl_base_sptr
1129 get_type_declaration(const type_base_sptr);
1130 
1131 bool
1132 types_are_compatible(const type_base_sptr,
1133  const type_base_sptr);
1134 
1135 bool
1136 types_are_compatible(const decl_base_sptr,
1137  const decl_base_sptr);
1138 
1139 const scope_decl*
1141  const scope_decl*);
1142 
1143 const scope_decl*
1144 get_top_most_scope_under(const decl_base_sptr,
1145  const scope_decl*);
1146 
1147 const scope_decl*
1148 get_top_most_scope_under(const decl_base_sptr,
1149  const scope_decl_sptr);
1150 
1151 void
1152 fqn_to_components(const std::string&,
1153  std::list<string>&);
1154 
1155 string
1156 components_to_type_name(const std::list<string>&);
1157 
1160 
1163 
1165 lookup_basic_type(const string&, const translation_unit&);
1166 
1168 lookup_basic_type(const type_decl&, const corpus&);
1169 
1171 lookup_basic_type(const string&, const corpus&);
1172 
1174 lookup_basic_type(const interned_string&, const corpus&);
1175 
1178 
1180 lookup_basic_type_per_location(const string&, const corpus&);
1181 
1184 
1187 
1189 lookup_class_type(const string&, const translation_unit&);
1190 
1192 lookup_class_type(const class_decl&, const corpus&);
1193 
1195 lookup_class_type(const interned_string&, const corpus&);
1196 
1197 const type_base_wptrs_type*
1198 lookup_class_types(const interned_string&, const corpus&);
1199 
1200 const type_base_wptrs_type*
1201 lookup_union_types(const interned_string&, const corpus&);
1202 
1203 bool
1205  const corpus&,
1207 
1208 const type_base_wptrs_type*
1209 lookup_class_types(const string&, const corpus&);
1210 
1211 const type_base_wptrs_type*
1212 lookup_union_types(const string&, const corpus&);
1213 
1216 
1218 lookup_class_type_per_location(const string&, const corpus&);
1219 
1221 lookup_class_type(const string&, const corpus&);
1222 
1224 lookup_class_type_through_scopes(const std::list<string>&,
1225  const translation_unit&);
1226 
1227 union_decl_sptr
1229 
1230 union_decl_sptr
1231 lookup_union_type(const interned_string&, const corpus&);
1232 
1233 union_decl_sptr
1235 
1236 union_decl_sptr
1237 lookup_union_type_per_location(const string&, const corpus&);
1238 
1239 union_decl_sptr
1240 lookup_union_type(const string&, const corpus&);
1241 
1244 
1246 lookup_enum_type(const string&, const translation_unit&);
1247 
1249 lookup_enum_type(const enum_type_decl&, const corpus&);
1250 
1252 lookup_enum_type(const string&, const corpus&);
1253 
1255 lookup_enum_type(const interned_string&, const corpus&);
1256 
1257 const type_base_wptrs_type*
1258 lookup_enum_types(const interned_string&, const corpus&);
1259 
1260 const type_base_wptrs_type*
1261 lookup_enum_types(const string&, const corpus&);
1262 
1265 
1267 lookup_enum_type_per_location(const string&, const corpus&);
1268 
1271 
1273 lookup_typedef_type(const typedef_decl&, const corpus&);
1274 
1276 lookup_typedef_type(const interned_string& type_name,
1277  const translation_unit& tu);
1278 
1280 lookup_typedef_type(const string& type_name, const translation_unit& tu);
1281 
1284 
1287 
1289 lookup_typedef_type_per_location(const string&, const corpus &);
1290 
1292 lookup_typedef_type(const string&, const corpus&);
1293 
1294 type_base_sptr
1295 lookup_class_or_typedef_type(const string&, const translation_unit&);
1296 
1297 type_base_sptr
1299 
1300 type_base_sptr
1301 lookup_class_or_typedef_type(const string&, const corpus&);
1302 
1303 type_base_sptr
1304 lookup_class_typedef_or_enum_type(const string&, const corpus&);
1305 
1306 qualified_type_def_sptr
1308 
1309 qualified_type_def_sptr
1310 lookup_qualified_type(const string&, const translation_unit&);
1311 
1312 qualified_type_def_sptr
1314 
1315 qualified_type_def_sptr
1317 
1320 
1322 lookup_pointer_type(const string&, const translation_unit&);
1323 
1325 lookup_pointer_type(const type_base_sptr& pointed_to_type,
1326  const translation_unit& tu);
1327 
1330 
1333 
1336 
1338 lookup_reference_type(const string&, const translation_unit&);
1339 
1341 lookup_reference_type(const type_base_sptr& pointed_to_type,
1342  bool lvalue_reference,
1343  const translation_unit& tu);
1344 
1347 
1350 
1353 
1355 lookup_array_type(const string&, const translation_unit&);
1356 
1358 lookup_array_type(const array_type_def&, const corpus&);
1359 
1361 lookup_array_type(const interned_string&, const corpus&);
1362 
1364 lookup_function_type(const string&,
1365  const translation_unit&);
1366 
1369  const translation_unit&);
1370 
1373  const translation_unit&);
1374 
1377  const translation_unit&);
1378 
1380 lookup_function_type(const function_type&, const corpus&);
1381 
1384 
1386 lookup_function_type(const function_type&, const corpus&);
1387 
1390 
1391 type_base_sptr
1392 lookup_type(const string&, const translation_unit&);
1393 
1394 const type_base_sptr
1395 lookup_type(const type_base_sptr, const translation_unit&);
1396 
1397 type_base_sptr
1398 lookup_type(const interned_string&, const corpus&);
1399 
1400 type_base_sptr
1402 
1403 type_base_sptr
1404 lookup_type(const type_base&, const corpus&);
1405 
1406 type_base_sptr
1407 lookup_type(const type_base_sptr&, const corpus&);
1408 
1409 type_base_sptr
1410 lookup_type_through_scopes(const std::list<string>&,
1411  const translation_unit&);
1412 
1413 type_base_sptr
1414 lookup_type_through_translation_units(const string&, const corpus&);
1415 
1416 type_base_sptr
1417 lookup_type_from_translation_unit(const string& type_name,
1418  const string& tu_path,
1419  const corpus& corp);
1420 
1423  const corpus&);
1424 
1425 type_base_sptr
1426 synthesize_type_from_translation_unit(const type_base_sptr&,
1427  translation_unit&);
1428 
1431  translation_unit&);
1432 
1433 const type_base_sptr
1434 lookup_type_in_scope(const string&,
1435  const scope_decl_sptr&);
1436 
1437 const type_base_sptr
1438 lookup_type_in_scope(const std::list<string>&,
1439  const scope_decl_sptr&);
1440 
1441 const decl_base_sptr
1442 lookup_var_decl_in_scope(const string&,
1443  const scope_decl_sptr&);
1444 
1445 const decl_base_sptr
1446 lookup_var_decl_in_scope(const std::list<string>&,
1447  const scope_decl_sptr&);
1448 
1449 string
1450 demangle_cplus_mangled_name(const string&);
1451 
1452 type_base_sptr
1453 type_or_void(const type_base_sptr, const environment&);
1454 
1455 type_base_sptr
1456 canonicalize(type_base_sptr);
1457 
1458 type_base*
1459 type_has_non_canonicalized_subtype(type_base_sptr t);
1460 
1461 bool
1462 type_has_sub_type_changes(type_base_sptr t_v1,
1463  type_base_sptr t_v2);
1464 
1465 void
1466 keep_type_alive(type_base_sptr t);
1467 
1468 size_t
1469 hash_type(const type_base *t);
1470 
1471 size_t
1473 
1474 size_t
1476 
1477 bool
1479 
1480 bool
1481 is_non_canonicalized_type(const type_base_sptr&);
1482 
1483 /// For a given type, return its exemplar type.
1484 ///
1485 /// For a given type, its exemplar type is either its canonical type
1486 /// or the canonical type of the definition type of a given
1487 /// declaration-only type. If the neither of those two types exist,
1488 /// then the exemplar type is the given type itself.
1489 ///
1490 /// @param type the input to consider.
1491 ///
1492 /// @return the exemplar type.
1493 type_base*
1494 get_exemplar_type(const type_base* type);
1495 
1496 bool
1498 
1499 bool
1500 types_have_similar_structure(const type_base_sptr& first,
1501  const type_base_sptr& second,
1502  bool indirect_type = false);
1503 
1504 bool
1506  const type_base* second,
1507  bool indirect_type = false);
1508 
1509 string
1511  bool is_anonymous,
1512  uint64_t size);
1513 
1516  const regex::regex_t_sptr& r);
1517 
1520  const regex::regex_t_sptr& regex);
1521 } // end namespace ir
1522 
1523 using namespace abigail::ir;
1524 
1525 namespace suppr
1526 {
1527 class suppression_base;
1528 
1529 /// Convenience typedef for a shared pointer to a @ref suppression.
1530 typedef shared_ptr<suppression_base> suppression_sptr;
1531 
1532 /// Convenience typedef for a vector of @ref suppression_sptr
1533 typedef vector<suppression_sptr> suppressions_type;
1534 
1535 } // end namespace suppr
1536 
1537 namespace symtab_reader
1538 {
1539 
1540 class symtab;
1541 /// Convenience typedef for a shared pointer to a @ref symtab
1542 typedef std::shared_ptr<symtab> symtab_sptr;
1543 
1544 } // end namespace symtab_reader
1545 
1546 void
1547 dump(const decl_base_sptr, std::ostream&);
1548 
1549 void
1550 dump(const decl_base_sptr);
1551 
1552 void
1553 dump(const type_base_sptr, std::ostream&);
1554 
1555 void
1556 dump(const type_base_sptr);
1557 
1558 void
1559 dump(const var_decl_sptr, std::ostream&);
1560 
1561 void
1562 dump(const var_decl_sptr);
1563 
1564 void
1565 dump(const translation_unit&, std::ostream&);
1566 
1567 void
1568 dump(const translation_unit&);
1569 
1570 void
1571 dump(const translation_unit_sptr, std::ostream&);
1572 
1573 void
1575 
1576 void
1578 
1579 void
1581 
1582 void
1583 dump_decl_location(const decl_base_sptr&);
1584 
1585 #ifndef ABG_ASSERT
1586 /// This is a wrapper around the 'assert' glibc call. It allows for
1587 /// its argument to have side effects, so that it keeps working when
1588 /// the code of libabigail is compiled with the NDEBUG macro defined.
1589 #define ABG_ASSERT(cond) do {({bool __abg_cond__ = bool(cond); assert(__abg_cond__); !!__abg_cond__;});} while (false)
1590 #endif
1591 
1592 } // end namespace abigail
1593 #endif // __ABG_IRFWD_H__
std::shared_ptr< symtab > symtab_sptr
Convenience typedef for a shared pointer to a symtab.
Definition: abg-fwd.h:1540
Declaration of types pertaining to the interned string pool used throughout Libabigail,...
The abstraction of a change between two ABI artifacts, a.k.a an artifact change.
The abstraction of an interned string.
The abstraction of an array type.
Definition: abg-ir.h:2446
Abstracts a class declaration.
Definition: abg-ir.h:4141
The base type of class_decl and union_decl.
Definition: abg-ir.h:3939
Abstract a class template.
Definition: abg-ir.h:3742
Abstraction of a group of corpora.
Definition: abg-corpus.h:353
This is the abstraction of a set of translation units (themselves seen as bundles of unitary abi arte...
Definition: abg-corpus.h:25
The base type of all declarations.
Definition: abg-ir.h:1516
The abstraction for a data member context relationship. This relates a data member to its parent clas...
Definition: abg-ir.h:2867
Abstracts a declaration for an enum type.
Definition: abg-ir.h:2677
This is an abstraction of the set of resources necessary to manage several aspects of the internal re...
Definition: abg-ir.h:140
Abstraction for a function declaration.
Definition: abg-ir.h:3024
Abstract a function template declaration.
Definition: abg-ir.h:3693
Abstraction of a function type.
Definition: abg-ir.h:3300
This abstracts the global scope of a given translation unit.
Definition: abg-ir.h:1930
The base class for the visitor type hierarchy used for traversing a translation unit.
Definition: abg-ir.h:4861
The entry point to manage locations.
Definition: abg-ir.h:432
The source location of a token.
Definition: abg-ir.h:290
Abstraction of a member function context relationship. This relates a member function to its parent c...
Definition: abg-ir.h:4466
Abstracts a member class template template.
Definition: abg-ir.h:4667
Abstract a member function template.
Definition: abg-ir.h:4612
Abstraction of the declaration of a method.
Definition: abg-ir.h:3837
Abstracts the type of a class member function.
Definition: abg-ir.h:3396
The abstraction of a namespace declaration.
Definition: abg-ir.h:2175
Abstracts non type template parameters.
Definition: abg-ir.h:3570
The abstraction of a pointer type.
Definition: abg-ir.h:2315
The abstraction of a qualified type.
Definition: abg-ir.h:2204
Abstracts a reference type.
Definition: abg-ir.h:2378
A declaration that introduces a scope.
Definition: abg-ir.h:1787
A type that introduces a scope.
Definition: abg-ir.h:2149
The base class of templates.
Definition: abg-ir.h:3452
Base class for a template parameter. Client code should use the more specialized type_template_parame...
Definition: abg-ir.h:3487
Abstracts a template template parameter.
Definition: abg-ir.h:3617
This is the abstraction of the set of relevant artefacts (types, variable declarations,...
Definition: abg-ir.h:663
An abstraction helper for type declarations.
Definition: abg-ir.h:1951
This abstracts a composition of types based on template type parameters. The result of the compositio...
Definition: abg-ir.h:3655
A basic type declaration that introduces no scope.
Definition: abg-ir.h:2086
The base class of both types and declarations.
Definition: abg-ir.h:1345
Abstracts a type template parameter.
Definition: abg-ir.h:3533
The abstraction of a typedef declaration.
Definition: abg-ir.h:2809
Abstracts a union type declaration.
Definition: abg-ir.h:4396
Abstracts a variable declaration.
Definition: abg-ir.h:2921
Base type of a direct suppression specifications types.
shared_ptr< diff > diff_sptr
Convenience typedef for a shared_ptr for the diff class.
Definition: abg-fwd.h:76
weak_ptr< diff > diff_wptr
Convenience typedef for a weak_ptr for the diff class.
Definition: abg-fwd.h:82
shared_ptr< diff_context > diff_context_sptr
Convenience typedef for a shared pointer of diff_context.
Definition: abg-fwd.h:68
weak_ptr< diff_context > diff_context_wptr
Convenience typedef for a weak pointer of diff_context.
Definition: abg-fwd.h:74
string get_pretty_representation(diff *d)
Get a copy of the pretty representation of a diff node.
The namespace of the internal representation of ABI artifacts like types and decls.
reference_type_def_sptr lookup_reference_type(const interned_string &type_name, const translation_unit &tu)
Lookup a reference type from a translation unit.
Definition: abg-ir.cc:11593
shared_ptr< type_tparameter > type_tparameter_sptr
Convenience typedef for a shared pointer to type_tparameter.
Definition: abg-fwd.h:331
shared_ptr< reference_type_def > reference_type_def_sptr
Convenience typedef for a shared pointer on a reference_type_def.
Definition: abg-fwd.h:229
const type_base_sptr lookup_type_in_scope(const string &fqn, const scope_decl_sptr &skope)
Lookup a type in a scope.
Definition: abg-ir.cc:11775
bool is_non_canonicalized_type(const type_base *t)
Test if a given type is allowed to be non canonicalized.
Definition: abg-ir.cc:26449
shared_ptr< dm_context_rel > dm_context_rel_sptr
A convenience typedef for a shared pointer to dm_context_rel.
Definition: abg-fwd.h:241
bool get_member_function_is_dtor(const function_decl &f)
Test whether a member function is a destructor.
Definition: abg-ir.cc:6434
const type_base * peel_qualified_type(const type_base *type)
Return the leaf underlying type of a qualified type.
Definition: abg-ir.cc:7195
weak_ptr< typedef_decl > typedef_decl_wptr
Convenience typedef for a weak pointer on a typedef_decl.
Definition: abg-fwd.h:167
type_decl_sptr lookup_basic_type(const interned_string &type_name, const translation_unit &tu)
Lookup a basic type from a translation unit.
Definition: abg-ir.cc:11262
shared_ptr< method_type > method_type_sptr
Convenience typedef for shared pointer to method_type.
Definition: abg-fwd.h:215
size_t hash_type(const type_base *t)
Hash an ABI artifact that is either a type.
Definition: abg-ir.cc:26426
var_decl_sptr get_last_data_member(const class_or_union &klass)
Get the last data member of a class type.
Definition: abg-ir.cc:5854
bool is_anonymous_or_typedef_named(const decl_base &d)
Test if a given decl is anonymous or has a naming typedef.
Definition: abg-ir.cc:6134
weak_ptr< var_decl > var_decl_wptr
Convenience typedef for a weak pointer on a var_decl.
Definition: abg-fwd.h:252
bool get_member_is_static(const decl_base &d)
Gets a flag saying if a class member is static or not.
Definition: abg-ir.cc:5648
bool debug_equals(const type_or_decl_base *l, const type_or_decl_base *r)
Test if two ABI artifacts are equal.
Definition: abg-ir.cc:9743
shared_ptr< function_decl > function_decl_sptr
Convenience typedef for a shared pointer on a function_decl.
Definition: abg-fwd.h:263
const type_base_wptrs_type * lookup_enum_types(const interned_string &qualified_name, const corpus &corp)
Look into a given corpus to find the enum type*s* that have a given qualified name.
Definition: abg-ir.cc:12843
shared_ptr< class_tdecl > class_tdecl_sptr
Convenience typedef for a shared pointer on a class_tdecl.
Definition: abg-fwd.h:287
weak_ptr< function_type > function_type_wptr
Convenience typedef for a weak pointer on a function_type.
Definition: abg-fwd.h:213
type_base_sptr lookup_class_or_typedef_type(const string &qualified_name, const corpus &corp)
Look into a corpus to find a class, union or typedef type which has a given qualified name.
Definition: abg-ir.cc:13005
void set_member_function_is_virtual(function_decl &f, bool is_virtual)
Set the virtual-ness of a member function.
Definition: abg-ir.cc:6659
ssize_t get_member_function_vtable_offset(const function_decl &f)
Get the vtable offset of a member function.
Definition: abg-ir.cc:6558
bool is_declaration_only_class_or_union_type(const type_base *t)
Test wheter a type is a declaration-only class.
Definition: abg-ir.cc:10486
vector< type_base_wptr > type_base_wptrs_type
A convenience typedef for a vector of type_base_wptr.
Definition: abg-fwd.h:143
scope_decl * get_type_scope(type_base *t)
Get the scope of a given type.
Definition: abg-ir.cc:8643
qualified_type_def_sptr clone_qualified_type(const qualified_type_def_sptr &t)
Clone a qualifiend type.
Definition: abg-ir.cc:7497
bool is_type(const type_or_decl_base &tod)
Test whether a declaration is a type.
Definition: abg-ir.cc:10194
scope_decl * is_scope_decl(decl_base *d)
Test if a declaration is a scope_decl.
Definition: abg-ir.cc:5518
bool is_anonymous_data_member(const decl_base &d)
Test if a decl is an anonymous data member.
Definition: abg-ir.cc:5877
weak_ptr< type_base > type_base_wptr
Convenience typedef for a weak pointer on a type_base.
Definition: abg-fwd.h:129
type_base_sptr peel_reference_type(const type_base_sptr &type)
Return the leaf pointed-to type node of a reference_type_def node.
Definition: abg-ir.cc:7104
bool has_scope(const decl_base &d)
Tests if a declaration has got a scope.
Definition: abg-ir.cc:5472
type_base_sptr lookup_type_from_translation_unit(const string &type_name, const string &tu_path, const corpus &corp)
Lookup a type from a given translation unit present in a give corpus.
Definition: abg-ir.cc:12402
type_base * get_exemplar_type(const type_base *type)
For a given type, return its exemplar type.
Definition: abg-ir.cc:26472
shared_ptr< non_type_tparameter > non_type_tparameter_sptr
Convenience typedef for shared pointer to non_type_template_parameter.
Definition: abg-fwd.h:317
class_decl_sptr is_compatible_with_class_type(const type_base_sptr &t)
Test if a type is a class. This function looks through typedefs.
Definition: abg-ir.cc:10417
void remove_decl_from_scope(decl_base_sptr decl)
Remove a given decl from its scope.
Definition: abg-ir.cc:8317
bool odr_is_relevant(const type_or_decl_base &artifact)
By looking at the language of the TU a given ABI artifact belongs to, test if the ONE Definition Rule...
Definition: abg-ir.cc:9808
array_type_def_sptr clone_array(const array_type_def_sptr &array)
Clone an array type.
Definition: abg-ir.cc:7430
var_decl_sptr find_last_data_member_matching_regexp(const class_or_union &t, const regex::regex_t_sptr &regex)
Find the last data member of a class or union which name matches a regular expression.
Definition: abg-ir.cc:26920
const var_decl_sptr get_first_non_anonymous_data_member(const var_decl_sptr anon_dm)
Get the first non-anonymous data member of a given anonymous data member.
Definition: abg-ir.cc:5791
bool is_user_defined_type(const type_base *t)
Test if a type is user-defined.
Definition: abg-ir.cc:5552
weak_ptr< class_decl > class_decl_wptr
Convenience typedef for a weak pointer on a class_decl.
Definition: abg-fwd.h:199
void debug_comp_stack(const environment &env)
Emit a trace of the two comparison operands stack on the standard error stream.
Definition: abg-ir.cc:9793
shared_ptr< global_scope > global_scope_sptr
Convenience typedef for shared pointer on global_scope.
Definition: abg-fwd.h:297
bool is_class_type(const type_or_decl_base &t)
Test whether a type is a class.
Definition: abg-ir.cc:10449
type_base_sptr synthesize_type_from_translation_unit(const type_base_sptr &type, translation_unit &tu)
In a translation unit, lookup a given type or synthesize it if it's a qualified type.
Definition: abg-ir.cc:14049
shared_ptr< array_type_def > array_type_def_sptr
Convenience typedef for a shared pointer on a array_type_def.
Definition: abg-fwd.h:234
function_type_sptr lookup_or_synthesize_fn_type(const function_type_sptr &fn_t, const corpus &corpus)
Look into an ABI corpus for a function type.
Definition: abg-ir.cc:12427
bool scope_anonymous_or_typedef_named(const decl_base &d)
Test if the scope of a given decl is anonymous or anonymous with a naming typedef.
Definition: abg-ir.cc:6120
bool is_anonymous_type(const type_base *t)
Test whether a declaration is a type.
Definition: abg-ir.cc:10245
type_base_sptr lookup_class_typedef_or_enum_type(const string &qualified_name, const corpus &corp)
Look into a corpus to find a class, typedef or enum type which has a given qualified name.
Definition: abg-ir.cc:13030
array_type_def * is_array_type(const type_or_decl_base *type)
Test if a type is an array_type_def.
Definition: abg-ir.cc:10954
bool is_at_template_scope(const shared_ptr< decl_base > decl)
Tests whether a given decl is at template scope.
Definition: abg-ir.cc:10059
reference_type_def * is_reference_type(type_or_decl_base *t)
Test whether a type is a reference_type_def.
Definition: abg-ir.cc:10599
const class_or_union_sptr data_member_has_anonymous_type(const var_decl &d)
Test if a data member has annonymous type or not.
Definition: abg-ir.cc:6022
type_decl * is_integral_type(const type_or_decl_base *t)
Test if a type is an integral type.
Definition: abg-ir.cc:10296
bool anonymous_data_member_exists_in_class(const var_decl &anon_dm, const class_or_union &clazz)
Test if a given anonymous data member exists in a class or union.
Definition: abg-ir.cc:6078
class_decl_sptr lookup_class_type_per_location(const interned_string &loc, const corpus &corp)
Look up a class_decl from a given corpus by its location.
Definition: abg-ir.cc:12706
void set_member_function_is_dtor(function_decl &f, bool d)
Set the destructor-ness property of a member function.
Definition: abg-ir.cc:6462
const type_base_sptr peel_array_type(const type_base_sptr &type)
Return the leaf element type of an array.
Definition: abg-ir.cc:7153
bool types_have_similar_structure(const type_base_sptr &first, const type_base_sptr &second, bool indirect_type)
Test if two types have similar structures, even though they are (or can be) different.
Definition: abg-ir.cc:26616
shared_ptr< template_parameter > template_parameter_sptr
Convenience typedef for shared pointer to template parameter.
Definition: abg-fwd.h:312
class_or_union * is_class_or_union_type(const type_or_decl_base *t)
Test if a type is a class_or_union.
Definition: abg-ir.cc:10509
var_decl_sptr get_data_member(class_or_union *clazz, const char *member_name)
Get a given data member, referred to by its name, of a class type.
Definition: abg-ir.cc:9625
shared_ptr< class_decl > class_decl_sptr
Convenience typedef for a shared pointer on a class_decl.
Definition: abg-fwd.h:187
type_base_sptr peel_typedef_pointer_or_reference_type(const type_base_sptr type)
Return the leaf underlying or pointed-to type node of a typedef_decl, pointer_type_def,...
Definition: abg-ir.cc:7291
void set_member_function_is_const(function_decl &f, bool is_const)
set the const-ness property of a member function.
Definition: abg-ir.cc:6518
decl_base_sptr strip_useless_const_qualification(const qualified_type_def_sptr t)
Strip qualification from a qualified type, when it makes sense.
Definition: abg-ir.cc:6846
namespace_decl_sptr is_namespace(const decl_base_sptr &d)
Tests if a declaration is a namespace declaration.
Definition: abg-ir.cc:10909
const var_decl_sptr get_next_data_member(const class_or_union *klass, const var_decl_sptr &data_member)
In the context of a given class or union, this function returns the data member that is located after...
Definition: abg-ir.cc:5815
void set_member_function_is_ctor(function_decl &f, bool c)
Setter for the is_ctor property of the member function.
Definition: abg-ir.cc:6405
const type_decl * is_type_decl(const type_or_decl_base *t)
Test whether a type is a type_decl (a builtin type).
Definition: abg-ir.cc:10278
decl_base * is_decl_slow(const type_or_decl_base *t)
Test if an ABI artifact is a declaration.
Definition: abg-ir.cc:10174
decl_base_sptr look_through_decl_only(const decl_base &d)
If a decl is decl-only get its definition. Otherwise, just return nil.
Definition: abg-ir.cc:10798
function_type_sptr is_function_type(const type_or_decl_base_sptr &t)
Test whether a type is a function_type.
Definition: abg-ir.cc:10689
vector< class_decl_sptr > classes_type
Convenience typedef for a vector of class_decl_sptr.
Definition: abg-fwd.h:193
string get_name(const type_or_decl_base *tod, bool qualified)
Build and return a copy of the name of an ABI artifact that is either a type or a decl.
Definition: abg-ir.cc:8529
bool is_template_parameter(const shared_ptr< decl_base > decl)
Tests whether a decl is a template parameter.
Definition: abg-ir.cc:10068
typedef_decl_sptr is_typedef(const type_or_decl_base_sptr t)
Test whether a type is a typedef.
Definition: abg-ir.cc:10336
shared_ptr< template_tparameter > template_tparameter_sptr
Convenience typedef for a shared_ptr to template_tparameter.
Definition: abg-fwd.h:325
uint64_t get_var_size_in_bits(const var_decl_sptr &v)
Get the size of a given variable.
Definition: abg-ir.cc:6296
weak_ptr< corpus > corpus_wptr
Convenience typedef for a weak pointer to a corpus.
Definition: abg-fwd.h:132
enum_type_decl_sptr lookup_enum_type_per_location(const interned_string &loc, const corpus &corp)
Look up an enum_type_decl from a given corpus, by its location.
Definition: abg-ir.cc:12873
string get_debug_representation(const type_or_decl_base *artifact)
Get the textual representation of a type for debugging purposes.
Definition: abg-ir.cc:9512
shared_ptr< function_type > function_type_sptr
Convenience typedef for a shared pointer on a function_type.
Definition: abg-fwd.h:205
shared_ptr< typedef_decl > typedef_decl_sptr
Convenience typedef for a shared pointer on a typedef_decl.
Definition: abg-fwd.h:161
function_type_sptr synthesize_function_type_from_translation_unit(const function_type &fn_type, translation_unit &tu)
In a translation unit, lookup the sub-types that make up a given function type and if the sub-types a...
Definition: abg-ir.cc:14132
type_base_sptr peel_pointer_type(const type_base_sptr &type)
Return the leaf pointed-to type node of a pointer_type_def node.
Definition: abg-ir.cc:7048
class_decl_sptr lookup_class_type(const string &fqn, const translation_unit &tu)
Lookup a class type from a translation unit.
Definition: abg-ir.cc:11302
type_base_sptr lookup_type_through_translation_units(const string &qn, const corpus &abi_corpus)
Lookup a type definition in all the translation units of a given ABI corpus.
Definition: abg-ir.cc:12377
qualified_type_def_sptr is_array_of_qualified_element(const array_type_def_sptr &array)
Tests if the element of a given array is a qualified type.
Definition: abg-ir.cc:10973
type_base * peel_pointer_or_reference_type(const type_base *type, bool peel_qual_type)
Return the leaf underlying or pointed-to type node of a, pointer_type_def, reference_type_def or qual...
Definition: abg-ir.cc:7393
vector< function_type_sptr > function_types_type
Convenience typedef fo a vector of function_type_sptr.
Definition: abg-fwd.h:210
bool lookup_decl_only_class_types(const interned_string &qualified_name, const corpus &corp, type_base_wptrs_type &result)
Look into a given corpus to find the class type*s* that have a given qualified name and that are decl...
Definition: abg-ir.cc:12630
bool member_function_has_vtable_offset(const function_decl &f)
Test if a virtual member function has a vtable offset set.
Definition: abg-ir.cc:6547
const enum_type_decl * is_enum_type(const type_or_decl_base *d)
Test if a decl is an enum_type_decl.
Definition: abg-ir.cc:10399
unordered_map< interned_string, type_base_wptrs_type, hash_interned_string > istring_type_base_wptrs_map_type
A convenience typedef for a map which key is an interned_string and which value is a vector of type_b...
Definition: abg-fwd.h:149
bool function_decl_is_less_than(const function_decl &f, const function_decl &s)
Test if the pretty representation of a given function_decl is lexicographically less then the pretty ...
Definition: abg-ir.cc:26564
var_decl_sptr find_data_member_from_anonymous_data_member(const var_decl_sptr &anon_dm, const string &name)
Find a data member inside an anonymous data member.
Definition: abg-ir.cc:10037
const global_scope * get_global_scope(const decl_base &decl)
return the global scope as seen by a given declaration.
Definition: abg-ir.cc:8386
shared_ptr< var_decl > var_decl_sptr
Convenience typedef for a shared pointer on a var_decl.
Definition: abg-fwd.h:246
const location & get_natural_or_artificial_location(const decl_base *decl)
Get the non-artificial (natural) location of a decl.
Definition: abg-ir.cc:9653
size_t hash_type_or_decl(const type_or_decl_base *tod)
Hash an ABI artifact that is either a type or a decl.
Definition: abg-ir.cc:26347
shared_ptr< scope_decl > scope_decl_sptr
Convenience typedef for a shared pointer on a scope_decl.
Definition: abg-fwd.h:258
shared_ptr< type_or_decl_base > type_or_decl_base_sptr
A convenience typedef for a shared_ptr to type_or_decl_base.
Definition: abg-fwd.h:119
shared_ptr< translation_unit > translation_unit_sptr
Convenience typedef for a shared pointer on a translation_unit type.
Definition: abg-fwd.h:134
shared_ptr< environment > environment_sptr
Convenience typedef for a shared pointer to an environment.
Definition: abg-fwd.h:112
const type_base_sptr lookup_type(const interned_string &fqn, const translation_unit &tu)
Lookup a type in a translation unit.
Definition: abg-ir.cc:11708
const decl_base_sptr lookup_var_decl_in_scope(const string &fqn, const scope_decl_sptr &skope)
Lookup a var_decl in a scope.
Definition: abg-ir.cc:11792
type_base * type_has_non_canonicalized_subtype(type_base_sptr t)
Test if a type has sub-types that are non-canonicalized.
Definition: abg-ir.cc:26284
bool is_function_template_pattern(const shared_ptr< decl_base > decl)
Test whether a decl is the pattern of a function template.
Definition: abg-ir.cc:10941
bool get_data_member_is_laid_out(const var_decl &m)
Test whether a data member is laid out.
Definition: abg-ir.cc:6324
bool is_template_parm_composition_type(const shared_ptr< decl_base > decl)
Tests whether a decl is a template parameter composition type.
Definition: abg-ir.cc:10927
union_decl_sptr lookup_union_type(const interned_string &type_name, const translation_unit &tu)
Lookup a union type from a translation unit.
Definition: abg-ir.cc:11339
type_base_sptr canonicalize(type_base_sptr t)
Compute the canonical type of a given type.
Definition: abg-ir.cc:14839
bool get_member_function_is_const(const function_decl &f)
Test whether a member function is const.
Definition: abg-ir.cc:6490
interned_string get_name_of_reference_to_type(const type_base &pointed_to_type, bool lvalue_reference, bool qualified, bool internal)
Get the name of the reference to a given type.
Definition: abg-ir.cc:8862
shared_ptr< pointer_type_def > pointer_type_def_sptr
Convenience typedef for a shared pointer on a pointer_type_def.
Definition: abg-fwd.h:220
unordered_map< string, translation_unit_sptr > string_tu_map_type
Convenience typedef for a map that associates a string to a translation unit.
Definition: abg-fwd.h:140
pointer_type_def * is_pointer_type(type_or_decl_base *t)
Test whether a type is a pointer_type_def.
Definition: abg-ir.cc:10558
type_base_sptr lookup_type_per_location(const interned_string &loc, const corpus &corp)
Lookup a type from a corpus, by its location.
Definition: abg-ir.cc:13335
bool get_next_data_member_offset(const class_or_union *klass, const var_decl_sptr &dm, uint64_t &offset)
Get the offset of the non-static data member that comes after a given one.
Definition: abg-ir.cc:6209
enum_type_decl_sptr lookup_enum_type(const interned_string &type_name, const translation_unit &tu)
Lookup an enum type from a translation unit.
Definition: abg-ir.cc:11407
uint64_t get_absolute_data_member_offset(const var_decl &m)
Get the absolute offset of a data member.
Definition: abg-ir.cc:6253
shared_ptr< ir_traversable_base > ir_traversable_base_sptr
Convenience typedef for a shared pointer to ir_traversable_base.
Definition: abg-fwd.h:106
bool is_member_function(const function_decl &f)
Test whether a function_decl is a member function.
Definition: abg-ir.cc:6348
var_decl * is_var_decl(const type_or_decl_base *tod)
Tests if a declaration is a variable declaration.
Definition: abg-ir.cc:10890
const type_base_sptr lookup_type_through_scopes(const type_base_sptr type, const translation_unit &tu)
Lookup a type from a translation unit by walking the scopes of the translation unit in sequence and l...
Definition: abg-ir.cc:12069
decl_base * is_decl(const type_or_decl_base *d)
Test if an ABI artifact is a declaration.
Definition: abg-ir.cc:10134
void keep_type_alive(type_base_sptr t)
Make sure that the life time of a given (smart pointer to a) type is the same as the life time of the...
Definition: abg-ir.cc:26322
bool is_member_type(const type_base_sptr &t)
Tests if a type is a class member.
Definition: abg-ir.cc:5537
string get_class_or_union_flat_representation(const class_or_union &cou, const string &indent, bool one_line, bool internal, bool qualified_names)
Get the flat representation of an instance of class_or_union type.
Definition: abg-ir.cc:9366
decl_base_sptr add_decl_to_scope(decl_base_sptr decl, scope_decl *scope)
Appends a declaration to a given scope, if the declaration doesn't already belong to one.
Definition: abg-ir.cc:8293
string build_internal_underlying_enum_type_name(const string &base_name, bool is_anonymous, uint64_t size)
Build the internal name of the underlying type of an enum.
Definition: abg-ir.cc:26874
shared_ptr< enum_type_decl > enum_type_decl_sptr
Convenience typedef for shared pointer to a enum_type_decl.
Definition: abg-fwd.h:169
void set_data_member_offset(var_decl_sptr m, uint64_t o)
Set the offset of a data member into its containing class.
Definition: abg-ir.cc:6147
type_base_sptr strip_typedef(const type_base_sptr type)
Recursively returns the the underlying type of a typedef. The return type should not be a typedef of ...
Definition: abg-ir.cc:6711
uint64_t get_data_member_offset(const var_decl &m)
Get the offset of a data member.
Definition: abg-ir.cc:6164
vector< class_or_union_sptr > classes_or_unions_type
Convenience typedef for a vector of class_or_union_sptr.
Definition: abg-fwd.h:196
class_or_union * is_at_class_scope(const decl_base_sptr decl)
Tests whether a given decl is at class scope.
Definition: abg-ir.cc:9994
bool get_member_function_is_virtual(const function_decl &f)
Test if a given member function is virtual.
Definition: abg-ir.cc:6621
class_or_union * anonymous_data_member_to_class_or_union(const var_decl *d)
Get the class_or_union type of a given anonymous data member.
Definition: abg-ir.cc:5994
location get_location(const type_base_sptr &type)
Get the location of the declaration of a given type.
Definition: abg-ir.cc:8609
weak_ptr< decl_base > decl_base_wptr
Convenience typedef for a weak pointer to a decl_base.
Definition: abg-fwd.h:178
decl_base_sptr insert_decl_into_scope(decl_base_sptr decl, scope_decl::declarations::iterator before, scope_decl *scope)
Inserts a declaration into a given scope, before a given IR child node of the scope.
Definition: abg-ir.cc:8337
interned_string get_function_type_name(const function_type_sptr &fn_type, bool internal)
Get the name of a given function type and return a copy of it.
Definition: abg-ir.cc:8939
class_or_union * look_through_decl_only_class(class_or_union *the_class)
If a class (or union) is a decl-only class, get its definition. Otherwise, just return the initial cl...
Definition: abg-ir.cc:10749
bool is_union_type(const type_or_decl_base &t)
Test if a type is a union_decl.
Definition: abg-ir.cc:10528
const location & get_artificial_or_natural_location(const decl_base *decl)
Get the artificial location of a decl.
Definition: abg-ir.cc:9672
type_base_sptr peel_typedef_type(const type_base_sptr &type)
Return the leaf underlying type node of a typedef_decl node.
Definition: abg-ir.cc:6994
const type_base_wptrs_type * lookup_union_types(const interned_string &qualified_name, const corpus &corp)
Look into a given corpus to find the union type*s* that have a given qualified name.
Definition: abg-ir.cc:12661
shared_ptr< template_decl > template_decl_sptr
Convenience typedef for a shared pointer to template_decl.
Definition: abg-fwd.h:304
array_type_def_sptr is_typedef_of_array(const type_base_sptr &t)
Test if a type is a typedef of an array.
Definition: abg-ir.cc:11011
function_type_sptr lookup_function_type(const interned_string &type_name, const translation_unit &tu)
Lookup a function type from a translation unit.
Definition: abg-ir.cc:11657
bool is_global_scope(const scope_decl &scope)
Tests whether if a given scope is the global scope.
Definition: abg-ir.cc:9939
void set_data_member_is_laid_out(var_decl_sptr m, bool l)
Set a flag saying if a data member is laid out.
Definition: abg-ir.cc:6310
bool is_data_member(const var_decl &v)
Test if a var_decl is a data member.
Definition: abg-ir.cc:5686
var_decl_sptr find_first_data_member_matching_regexp(const class_or_union &t, const regex::regex_t_sptr &r)
Find the first data member of a class or union which name matches a regular expression.
Definition: abg-ir.cc:26899
const type_base_wptrs_type * lookup_class_types(const interned_string &qualified_name, const corpus &corp)
Look into a given corpus to find the class type*s* that have a given qualified name.
Definition: abg-ir.cc:12610
const decl_base * get_type_declaration(const type_base *t)
Get the declaration for a given type.
Definition: abg-ir.cc:9827
pointer_type_def_sptr lookup_pointer_type(const interned_string &type_name, const translation_unit &tu)
Lookup a pointer type from a translation unit.
Definition: abg-ir.cc:11531
shared_ptr< type_composition > type_composition_sptr
Convenience typedef for shared pointer to type_composition.
Definition: abg-fwd.h:344
void set_member_is_static(decl_base &d, bool s)
Sets the static-ness property of a class member.
Definition: abg-ir.cc:24747
weak_ptr< template_decl > template_decl_wptr
Convenience typedef for a weak pointer to template_decl.
Definition: abg-fwd.h:310
shared_ptr< mem_fn_context_rel > mem_fn_context_rel_sptr
A convenience typedef for a shared pointer to mem_fn_context_rel.
Definition: abg-fwd.h:276
shared_ptr< type_decl > type_decl_sptr
Convenience typedef for a shared pointer on a type_decl.
Definition: abg-fwd.h:156
qualified_type_def_sptr lookup_qualified_type(const interned_string &type_name, const translation_unit &tu)
Lookup a qualified type from a translation unit.
Definition: abg-ir.cc:11485
typedef_decl_sptr clone_typedef(const typedef_decl_sptr &t)
Clone a typedef type.
Definition: abg-ir.cc:7472
type_decl_sptr lookup_basic_type_per_location(const interned_string &loc, const corpus &corp)
Lookup a type_decl type from a given corpus, by its location.
Definition: abg-ir.cc:12498
void strip_redundant_quals_from_underyling_types(const qualified_type_def_sptr &t)
Merge redundant qualifiers from a tree of qualified types.
Definition: abg-ir.cc:6969
translation_unit * get_translation_unit(const decl_base &decl)
Return the translation unit a declaration belongs to.
Definition: abg-ir.cc:9910
type_or_decl_base * debug(const type_or_decl_base *artifact)
Emit a textual representation of an artifact to std error stream for debugging purposes.
Definition: abg-ir.cc:9692
bool is_template_decl(const shared_ptr< decl_base > decl)
Tests whether a decl is a template.
Definition: abg-ir.cc:11055
shared_ptr< namespace_decl > namespace_decl_sptr
Convenience typedef for a shared pointer on namespace_decl.
Definition: abg-fwd.h:282
string demangle_cplus_mangled_name(const string &mangled_name)
Demangle a C++ mangled name and return the resulting string.
Definition: abg-ir.cc:14206
string components_to_type_name(const list< string > &comps)
Turn a set of qualified name components (that name a type) into a qualified name string.
Definition: abg-ir.cc:11152
bool types_are_compatible(const type_base_sptr type1, const type_base_sptr type2)
Test if two types are equal modulo a typedef.
Definition: abg-ir.cc:9861
interned_string get_type_name(const type_base_sptr &t, bool qualified, bool internal)
Get the name of a given type and return a copy of it.
Definition: abg-ir.cc:8678
const scope_decl * get_top_most_scope_under(const decl_base *decl, const scope_decl *scope)
Return the a scope S containing a given declaration and that is right under a given scope P.
Definition: abg-ir.cc:8430
type_base_sptr clone_array_tree(const type_base_sptr t)
Clone a type tree made of an array or a typedef of array.
Definition: abg-ir.cc:7550
interned_string get_name_of_pointer_to_type(const type_base &pointed_to_type, bool qualified, bool internal)
Get the name of the pointer to a given type.
Definition: abg-ir.cc:8840
typedef_decl_sptr lookup_typedef_type_per_location(const interned_string &loc, const corpus &corp)
Lookup a typedef_decl from a corpus, by its location.
Definition: abg-ir.cc:12968
function_decl * is_function_decl(const type_or_decl_base *d)
Test whether a declaration is a function_decl.
Definition: abg-ir.cc:10082
bool type_has_sub_type_changes(const type_base_sptr t_v1, const type_base_sptr t_v2)
Tests if the change of a given type effectively comes from just its sub-types. That is,...
Definition: abg-ir.cc:26306
method_type_sptr is_method_type(const type_or_decl_base_sptr &t)
Test whether a type is a method_type.
Definition: abg-ir.cc:10719
qualified_type_def * is_qualified_type(const type_or_decl_base *t)
Test whether a type is a reference_type_def.
Definition: abg-ir.cc:10669
typedef_decl_sptr lookup_typedef_type(const interned_string &type_name, const translation_unit &tu)
Lookup a typedef type from a translation unit.
Definition: abg-ir.cc:11445
interned_string get_function_id_or_pretty_representation(function_decl *fn)
Get the ID of a function, or, if the ID can designate several different functions,...
Definition: abg-ir.cc:9018
union_decl_sptr lookup_union_type_per_location(const interned_string &loc, const corpus &corp)
Lookup a union type in a given corpus, from its location.
Definition: abg-ir.cc:11372
string build_qualified_name(const scope_decl *scope, const string &name)
Build and return a qualified name from a name and its scope.
Definition: abg-ir.cc:8575
void set_member_function_vtable_offset(function_decl &f, ssize_t s)
Set the vtable offset of a member function.
Definition: abg-ir.cc:6591
interned_string get_method_type_name(const method_type_sptr fn_type, bool internal)
Get the name of a given method type and return a copy of it.
Definition: abg-ir.cc:9046
enum_type_decl_sptr look_through_decl_only_enum(const enum_type_decl &the_enum)
If an enum is a decl-only enum, get its definition. Otherwise, just return the initial enum.
Definition: abg-ir.cc:10779
shared_ptr< function_tdecl > function_tdecl_sptr
Convenience typedef for a shared pointer on a function_tdecl.
Definition: abg-fwd.h:292
enum_type_decl_sptr is_compatible_with_enum_type(const type_base_sptr &t)
Test if a type is an enum. This function looks through typedefs.
Definition: abg-ir.cc:10366
type_base * peel_qualified_or_typedef_type(const type_base *type)
Return the leaf underlying type of a qualified or typedef type.
Definition: abg-ir.cc:7240
type_base_sptr type_or_void(const type_base_sptr t, const environment &env)
Return either the type given in parameter if it's non-null, or the void type.
Definition: abg-ir.cc:14236
bool is_at_global_scope(const decl_base &decl)
Tests whether a given declaration is at global scope.
Definition: abg-ir.cc:9967
vector< enum_type_decl_sptr > enums_type
Convenience typedef for a vector of enum_type_decl_sptr.
Definition: abg-fwd.h:175
bool is_member_decl(const decl_base_sptr d)
Tests if a declaration is a class member.
Definition: abg-ir.cc:5490
array_type_def_sptr lookup_array_type(const interned_string &type_name, const translation_unit &tu)
Lookup an array type from a translation unit.
Definition: abg-ir.cc:11637
class_decl_sptr lookup_class_type_through_scopes(const list< string > &fqn, const translation_unit &tu)
Lookup a class type from a translation unit by walking its scopes in sequence and by looking into the...
Definition: abg-ir.cc:12137
const type_base * is_void_pointer_type(const type_base *type)
Test if a type is a pointer to void type.
Definition: abg-ir.cc:10632
void fqn_to_components(const string &fqn, list< string > &comps)
Decompose a fully qualified name into the list of its components.
Definition: abg-ir.cc:11126
bool get_member_function_is_ctor(const function_decl &f)
Test whether a member function is a constructor.
Definition: abg-ir.cc:6375
std::shared_ptr< regex_t > regex_t_sptr
A convenience typedef for a shared pointer of regex_t.
Definition: abg-fwd.h:88
vector< suppression_sptr > suppressions_type
Convenience typedef for a vector of suppression_sptr.
Definition: abg-fwd.h:1533
shared_ptr< suppression_base > suppression_sptr
Convenience typedef for a shared pointer to a suppression.
Definition: abg-fwd.h:1527
bool base_name(string const &path, string &file_name)
Return the file name part of a file part.
Toplevel namespace for libabigail.
void dump_decl_location(const decl_base &d, ostream &o)
Serialize the source location of a decl to an output stream for debugging purposes.
Definition: abg-writer.cc:4853
void dump(const decl_base_sptr d, std::ostream &o, const bool annotate)
Serialize a pointer to decl_base to an output stream.
Definition: abg-writer.cc:4713
A functor to hash instances of interned_string.
The base of an entity of the intermediate representation that is to be traversed.
Definition: abg-ir.h:453