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-2024 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.
28namespace 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.
54using std::shared_ptr;
55using std::weak_ptr;
56using std::unordered_map;
57using std::string;
58using std::vector;
59using std::unordered_set;
60
61typedef unordered_set<string> string_set_type;
62
63// Pull in relational operators.
64using namespace std::rel_ops;
65
66namespace comparison
67{
68class diff_context;
69
70/// Convenience typedef for a shared pointer of @ref diff_context.
71typedef shared_ptr<diff_context> diff_context_sptr;
72
73/// Convenience typedef for a weak pointer of @ref diff_context.
74typedef weak_ptr<diff_context> diff_context_wptr;
75
76class diff;
77
78/// Convenience typedef for a shared_ptr for the @ref diff class
79typedef shared_ptr<diff> diff_sptr;
80
81/// Convenience typedef for a weak_ptr for the @ref diff class
82typedef weak_ptr<diff> diff_wptr;
83}
84
85namespace regex
86{
87/// A convenience typedef for a shared pointer of regex_t.
88typedef std::shared_ptr<regex_t> regex_t_sptr;
89}// end namespace regex
90
91namespace ir
92{
93
94// Forward declarations for corpus.
95
96class corpus;
97typedef shared_ptr<corpus> corpus_sptr;
98
99class corpus_group;
100typedef shared_ptr<corpus_group> corpus_group_sptr;
101
102// Forward declarations for ir.
103
104class ir_node_visitor;
105
107
108/// Convenience typedef for a shared pointer to @ref
109/// ir_traversable_base.
110typedef shared_ptr<ir_traversable_base> ir_traversable_base_sptr;
111
112class environment;
113/// Convenience typedef for a shared pointer to an @ref environment
114typedef shared_ptr<environment> environment_sptr;
115
116class location;
117class location_manager;
118
120/// A convenience typedef for a shared_ptr to @ref type_or_decl_base.
121typedef shared_ptr<type_or_decl_base> type_or_decl_base_sptr;
122
123class type_base;
124
125// Convenience typedef for a shared pointer on a @ref type_base
126typedef shared_ptr<type_base> type_base_sptr;
127
128/// Convenience typedef for a weak pointer on a @ref type_base
129typedef weak_ptr<type_base> type_base_wptr;
130
131/// Convenience typedef for a weak pointer to a @ref corpus.
132typedef weak_ptr<corpus> corpus_wptr;
133
134class translation_unit;
135/// Convenience typedef for a shared pointer on a @ref
136/// translation_unit type.
137typedef shared_ptr<translation_unit> translation_unit_sptr;
138/// Convenience typedef for a map that associates a string to a
139/// translation unit.
140typedef unordered_map<string, translation_unit_sptr> string_tu_map_type;
141
142/// A convenience typedef for a vector of type_base_wptr.
143typedef 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.
147typedef unordered_map<interned_string,
150
151class decl_base;
152
153// Convenience typedef for a smart pointer on @ref decl_base.
154typedef shared_ptr<decl_base> decl_base_sptr;
155
156/// Convenience typedef for a map which key is a string and which
157/// value is a @ref decl_base_sptr.
158typedef unordered_map<string, decl_base_sptr> string_decl_base_sptr_map;
159
160class type_decl;
161/// Convenience typedef for a shared pointer on a @ref type_decl.
162typedef shared_ptr<type_decl> type_decl_sptr;
163
164
165class typedef_decl;
166
167/// Convenience typedef for a shared pointer on a @ref typedef_decl.
168typedef shared_ptr<typedef_decl> typedef_decl_sptr;
169
170/// Convenience typedef for a weak pointer on a @ref typedef_decl.
171typedef weak_ptr<typedef_decl> typedef_decl_wptr;
172
173class enum_type_decl;
174
175/// Convenience typedef for shared pointer to a @ref enum_type_decl.
176typedef shared_ptr<enum_type_decl> enum_type_decl_sptr;
177
178/// Convenience typedef for a vector of @ref enum_type_decl_sptr
179typedef vector<enum_type_decl_sptr> enums_type;
180
181/// Convenience typedef for a weak pointer to a @ref decl_base.
182typedef weak_ptr<decl_base> decl_base_wptr;
183
184class class_or_union;
185
186typedef shared_ptr<class_or_union> class_or_union_sptr;
187typedef weak_ptr<class_or_union> class_or_union_wptr;
188
189class scope_type_decl;
190
191class class_decl;
192
193/// Convenience typedef for a shared pointer on a @ref class_decl
194typedef shared_ptr<class_decl> class_decl_sptr;
195
196/// Convenience typedef for a vector of @ref class_decl_sptr
197typedef vector<class_decl_sptr> classes_type;
198
199/// Convenience typedef for a vector of @ref class_or_union_sptr
200typedef vector<class_or_union_sptr> classes_or_unions_type;
201
202/// Convenience typedef for a weak pointer on a @ref class_decl.
203typedef weak_ptr<class_decl> class_decl_wptr;
204
205class union_decl;
206
207typedef shared_ptr<union_decl> union_decl_sptr;
208
209class function_type;
210/// Convenience typedef for a shared pointer on a @ref function_type
211typedef shared_ptr<function_type> function_type_sptr;
212
213/// Convenience typedef fo a vector of @ref function_type_sptr
214typedef vector<function_type_sptr> function_types_type;
215
216/// Convenience typedef for a weak pointer on a @ref function_type
217typedef weak_ptr<function_type> function_type_wptr;
218
219class method_type;
220
221/// Convenience typedef for shared pointer to @ref method_type.
222typedef shared_ptr<method_type> method_type_sptr;
223
224class pointer_type_def;
225
226/// Convenience typedef for a shared pointer on a @ref pointer_type_def
227typedef shared_ptr<pointer_type_def> pointer_type_def_sptr;
228
230
231typedef shared_ptr<qualified_type_def> qualified_type_def_sptr;
232
234
235/// Convenience typedef for a shared pointer on a @ref reference_type_def
236typedef shared_ptr<reference_type_def> reference_type_def_sptr;
237
238class ptr_to_mbr_type;
239/// Convenience typedef for a shared pointer to a @ref ptr_to_mbr_type
240typedef shared_ptr<ptr_to_mbr_type> ptr_to_mbr_type_sptr;
241
242class array_type_def;
243
244/// Convenience typedef for a shared pointer on a @ref array_type_def
245typedef shared_ptr<array_type_def> array_type_def_sptr;
246
247class subrange_type;
248
249class dm_context_rel;
250
251/// A convenience typedef for a shared pointer to dm_context_rel.
252typedef shared_ptr<dm_context_rel> dm_context_rel_sptr;
253
254class var_decl;
255
256/// Convenience typedef for a shared pointer on a @ref var_decl
257typedef shared_ptr<var_decl> var_decl_sptr;
258
259/// Convenience typedef for a weak pointer on a @ref var_decl
260typedef weak_ptr<var_decl> var_decl_wptr;
261
262class scope_decl;
263
264/// Convenience typedef for a shared pointer on a @ref scope_decl.
265typedef shared_ptr<scope_decl> scope_decl_sptr;
266
267class function_decl;
268
269/// Convenience typedef for a shared pointer on a @ref function_decl
270typedef shared_ptr<function_decl> function_decl_sptr;
271
272class method_decl;
273
274typedef shared_ptr<method_decl> method_decl_sptr;
275
277
278/// A convenience typedef for a shared pointer to @ref
279/// mem_fn_context_rel.
280typedef shared_ptr<mem_fn_context_rel> mem_fn_context_rel_sptr;
281
282class namespace_decl;
283
284/// Convenience typedef for a shared pointer on namespace_decl.
285typedef shared_ptr<namespace_decl> namespace_decl_sptr;
286
287class class_tdecl;
288
289/// Convenience typedef for a shared pointer on a @ref class_tdecl
290typedef shared_ptr<class_tdecl> class_tdecl_sptr;
291
292class function_tdecl;
293
294/// Convenience typedef for a shared pointer on a @ref function_tdecl
295typedef shared_ptr<function_tdecl> function_tdecl_sptr;
296
297class global_scope;
298
299/// Convenience typedef for shared pointer on @ref global_scope.
300typedef shared_ptr<global_scope> global_scope_sptr;
301
302class node_visitor;
303
304class template_decl;
305
306/// Convenience typedef for a shared pointer to @ref template_decl
307typedef shared_ptr<template_decl> template_decl_sptr;
308
309/// Convenience typedef for a weak pointer to template_decl
310typedef weak_ptr<template_decl> template_decl_wptr;
311
313
314/// Convenience typedef for shared pointer to template parameter
315typedef shared_ptr<template_parameter> template_parameter_sptr;
316
318
319/// Convenience typedef for shared pointer to @ref
320/// non_type_template_parameter
321typedef shared_ptr<non_type_tparameter> non_type_tparameter_sptr;
322
323class type_tparameter;
324
326
327/// Convenience typedef for a shared_ptr to @ref template_tparameter.
328typedef shared_ptr<template_tparameter> template_tparameter_sptr;
329
330/// Convenience typedef for a shared pointer to @ref type_tparameter.
331typedef shared_ptr<type_tparameter> type_tparameter_sptr;
332
333class type_composition;
334
336typedef shared_ptr<member_function_template> member_function_template_sptr;
337typedef vector<member_function_template_sptr> member_function_templates;
338
340typedef shared_ptr<member_class_template> member_class_template_sptr;
341typedef vector<member_class_template_sptr> member_class_templates;
342
343/// Convenience typedef for shared pointer to type_composition
344typedef shared_ptr<type_composition> type_composition_sptr;
345
346decl_base_sptr
347add_decl_to_scope(decl_base_sptr, scope_decl*);
348
349decl_base_sptr
350add_decl_to_scope(decl_base_sptr, const scope_decl_sptr&);
351
352const global_scope*
354
355const global_scope*
357
358const global_scope*
359get_global_scope(const decl_base_sptr);
360
363
366
368get_translation_unit(const decl_base_sptr);
369
370bool
372
373const global_scope*
375
376bool
378
379bool
381
382bool
383is_at_global_scope(const decl_base_sptr);
384
385bool
387
389is_at_class_scope(const decl_base_sptr);
390
393
396
397bool
398is_at_template_scope(const decl_base_sptr);
399
400bool
401is_template_parameter(const decl_base_sptr);
402
405
408
409bool
411
414
415decl_base_sptr
417
420
421decl_base_sptr
423
424bool
426
429
430type_base_sptr
432
433bool
435
436bool
437is_anonymous_type(const type_base_sptr&);
438
439bool
440is_npaf_type(const type_base_sptr&);
441
442const type_decl*
444
447
450
453
456
457const typedef_decl*
459
460const typedef_decl*
461is_typedef(const type_base*);
462
465
467is_compatible_with_enum_type(const type_base_sptr&);
468
470is_compatible_with_enum_type(const decl_base_sptr&);
471
474
475const enum_type_decl*
477
478bool
480
483
486
489
492
495
498
501
504
505bool
507 bool look_through_decl_only = false);
508
509bool
510is_declaration_only_class_or_union_type(const type_base_sptr& t,
511 bool look_through_decl_only = false);
512
515
516class_or_union_sptr
518
519bool
521 const class_or_union*);
522
523bool
524class_or_union_types_of_same_kind(const class_or_union_sptr&,
525 const class_or_union_sptr&);
526
527bool
529
532
533union_decl_sptr
535
537is_compatible_with_class_type(const type_base_sptr&);
538
540is_compatible_with_class_type(const decl_base_sptr&);
541
542const pointer_type_def*
544 bool look_through_qualifiers=false);
545
548 bool look_through_qualifiers=false);
549
551is_pointer_to_function_type(const type_base_sptr&);
552
554is_pointer_to_array_type(const type_base_sptr&);
555
557is_pointer_to_ptr_to_mbr_type(const type_base_sptr&);
558
560is_pointer_to_npaf_type(const type_base_sptr&);
561
562bool
564
565bool
567
568bool
570
572is_reference_type(type_or_decl_base*, bool look_through_qualifiers=false);
573
575is_reference_type(const type_or_decl_base*, bool look_through_qualifiers=false);
576
579 bool look_through_qualifiers=false);
580
581const ptr_to_mbr_type*
583 bool look_through_qualifiers=false);
584
587 bool look_through_qualifiers=false);
588
589const type_base*
591
592const type_base_sptr
593is_void_pointer_type(const type_base_sptr&);
594
595const type_base*
597
598const type_base*
600
603
604qualified_type_def_sptr
606
607bool
608is_const_qualified_type(const type_base_sptr& t);
609
610bool
611is_const_qualified_type(const qualified_type_def_sptr&);
612
613type_base_sptr
614peel_const_qualified_type(const qualified_type_def_sptr&);
615
618
621
622const function_type*
624
627
628const method_type*
630
633
634class_or_union_sptr
636
637class_or_union_sptr
638look_through_decl_only_class(class_or_union_sptr);
639
642
645
648
649decl_base_sptr
651
654
655decl_base_sptr
656look_through_decl_only(const decl_base_sptr&);
657
660
663
665is_namespace(const decl_base_sptr&);
666
668is_namespace(const decl_base*);
669
670bool
671is_template_parm_composition_type(const decl_base_sptr);
672
673bool
674is_template_decl(const decl_base_sptr);
675
676bool
677is_function_template_pattern(const decl_base_sptr);
678
679
680decl_base_sptr
681insert_decl_into_scope(decl_base_sptr,
682 vector<decl_base_sptr >::iterator,
683 scope_decl*);
684
685decl_base_sptr
686insert_decl_into_scope(decl_base_sptr,
687 vector<decl_base_sptr >::iterator,
689
690bool
691has_scope(const decl_base&);
692
693bool
694has_scope(const decl_base_sptr);
695
696bool
697is_member_decl(const decl_base_sptr);
698
699bool
701
702bool
704
707
709is_scope_decl(const decl_base_sptr&);
710
711bool
712is_member_type(const type_base_sptr&);
713
714bool
716
717bool
718is_user_defined_type(const type_base_sptr&);
719
720void
721remove_decl_from_scope(decl_base_sptr);
722
723bool
725
726bool
728
729bool
730get_member_is_static(const decl_base_sptr&);
731
732void
734
735void
736set_member_is_static(const decl_base_sptr&, bool);
737
738bool
740
743
744bool
746
749
750bool
752
754is_data_member(const decl_base_sptr&);
755
758
761
762const var_decl_sptr
763get_next_data_member(const class_or_union_sptr&, const var_decl_sptr&);
764
767
770
772get_last_data_member(const class_or_union_sptr&);
773
774bool
776
777bool
778collect_non_anonymous_data_members(const class_or_union_sptr &cou, string_decl_base_sptr_map& dms);
779
780bool
782
783const var_decl*
785
786const var_decl*
788
791
793is_anonymous_data_member(const decl_base_sptr&);
794
797
798const var_decl*
800
801bool
803
804bool
806
807bool
809
810bool
812
813const var_decl_sptr
815
818 const string&);
819
822
823class_or_union_sptr
825
826class_or_union_sptr
828
829bool
831 const class_or_union& clazz);
832
833bool
835
836const class_or_union_sptr
838
839const class_or_union_sptr
841
842const class_or_union_sptr
844
847 bool look_through_qualifiers = false);
848
851 bool look_through_qualifiers = false);
852
854is_array_of_qualified_element(const type_base_sptr&);
855
856qualified_type_def_sptr
858
860is_typedef_of_array(const type_base_sptr&);
861
862void
864
865uint64_t
867
868uint64_t
870
871uint64_t
872get_data_member_offset(const decl_base_sptr);
873
874uint64_t
876
877bool
879 const var_decl_sptr&,
880 uint64_t&);
881
882bool
883get_next_data_member_offset(const class_or_union_sptr&,
884 const var_decl_sptr&,
885 uint64_t&);
886
887uint64_t
889
890void
892
893bool
895
896bool
898
899bool
901
902bool
904
905bool
907
908bool
910
911bool
913
914void
916
917void
919
920bool
922
923bool
925
926void
928
929void
931
932bool
934
935bool
937
938void
940
941void
943
944bool
946
947ssize_t
949
950ssize_t
952
953void
955 ssize_t s);
956
957void
959 ssize_t s);
960
961bool
963
964bool
966
967bool
969
970void
972
973void
975
976type_base_sptr
977strip_typedef(const type_base_sptr);
978
979decl_base_sptr
980strip_useless_const_qualification(const qualified_type_def_sptr t);
981
982void
983strip_redundant_quals_from_underyling_types(const qualified_type_def_sptr&);
984
985type_base_sptr
986peel_typedef_type(const type_base_sptr&);
987
988const type_base*
990
991type_base_sptr
992peel_pointer_type(const type_base_sptr&);
993
994const type_base*
996
997type_base_sptr
998peel_reference_type(const type_base_sptr&);
999
1000const type_base*
1002
1003const type_base_sptr
1004peel_array_type(const type_base_sptr&);
1005
1006const type_base*
1008
1009const type_base*
1011
1012const type_base_sptr
1013peel_qualified_type(const type_base_sptr&);
1014
1015type_base*
1017
1018type_base_sptr
1019peel_qualified_or_typedef_type(const type_base_sptr &type);
1020
1021type_base_sptr
1022peel_typedef_pointer_or_reference_type(const type_base_sptr);
1023
1024type_base*
1026
1027type_base*
1029 bool peel_qual_type);
1030
1031type_base*
1033 bool peel_qualified_type = true);
1034
1036clone_array(const array_type_def_sptr& array);
1037
1040
1041qualified_type_def_sptr
1042clone_qualified_type(const qualified_type_def_sptr& t);
1043
1044type_base_sptr
1045clone_array_tree(const type_base_sptr t);
1046
1047string
1048get_name(const type_or_decl_base*, bool qualified = true);
1049
1050string
1052 bool qualified = true);
1053
1055get_location(const type_base_sptr& type);
1056
1058get_location(const decl_base_sptr& decl);
1059
1060string
1061build_qualified_name(const scope_decl* scope, const string& name);
1062
1063string
1064build_qualified_name(const scope_decl* scope,
1065 const type_base_sptr& type);
1066
1069
1071get_type_scope(const type_base_sptr&);
1072
1074get_type_name(const type_base_sptr&,
1075 bool qualified = true,
1076 bool internal = false);
1077
1080 bool qualified = true,
1081 bool internal = false);
1082
1085 bool qualified = true,
1086 bool internal = false);
1087
1089get_name_of_pointer_to_type(const type_base& pointed_to_type,
1090 bool qualified = true,
1091 bool internal = false);
1092
1094get_name_of_reference_to_type(const type_base& pointed_to_type,
1095 bool lvalue_reference = false,
1096 bool qualified = true,
1097 bool internal = false);
1098
1101 bool internal = false);
1102
1104get_function_type_name(const function_type*, bool internal = false);
1105
1107get_function_type_name(const function_type&, bool internal = false);
1108
1111
1113get_method_type_name(const method_type_sptr&, bool internal = false);
1114
1116get_method_type_name(const method_type*, bool internal = false);
1117
1119get_method_type_name(const method_type&, bool internal = false);
1120
1121string
1122get_pretty_representation(const decl_base*, bool internal = false);
1123
1124string
1125get_pretty_representation(const type_base*, bool internal = false);
1126
1127string
1128get_pretty_representation(const type_or_decl_base*, bool internal = false);
1129
1130string
1132 bool internal = false);
1133
1134string
1135get_pretty_representation(const decl_base_sptr&, bool internal = false);
1136
1137string
1138get_pretty_representation(const type_base_sptr&, bool internal = false);
1139
1140string
1141get_pretty_representation(const function_type&, bool internal = false);
1142
1143string
1144get_pretty_representation(const function_type*, bool internal = false);
1145
1146string
1148 bool internal = false);
1149
1150string
1151get_pretty_representation(const method_type&, bool internal = false);
1152
1153string
1154get_pretty_representation(const method_type*, bool internal = false);
1155
1156string
1158 bool internal = false);
1159
1160string
1162 const string& indent,
1163 bool one_line,
1164 bool internal,
1165 bool qualified_name = true);
1166
1167string
1169 const string& indent,
1170 bool one_line,
1171 bool internal,
1172 bool qualified_name = true);
1173
1174string
1175get_class_or_union_flat_representation(const class_or_union_sptr& cou,
1176 const string& indent,
1177 bool one_line,
1178 bool internal,
1179 bool qualified_name = true);
1180
1181string
1183 const string& indent,
1184 bool one_line,
1185 bool internal,
1186 bool qualified_names);
1187
1188string
1190 const string& indent,
1191 bool one_line,
1192 bool internal,
1193 bool qualified_names);
1194
1195string
1197 const string& indent,
1198 bool one_line,
1199 bool qualified_names);
1200
1201string
1203 const string& indent,
1204 bool one_line,
1205 bool internal,
1206 bool qualified_name);
1207
1208string
1210
1212get_data_member(class_or_union *, const char*);
1213
1215get_data_member(type_base *clazz, const char* member_name);
1216
1217const location&
1219
1220const location&
1222
1224debug(const type_or_decl_base* artifact);
1225
1226type_base*
1227debug(const type_base* artifact);
1228
1229decl_base*
1230debug(const decl_base* artifact);
1231
1232bool
1234
1235void
1236debug_comp_stack(const environment& env);
1237
1238bool
1240
1241const decl_base*
1243
1244decl_base*
1246
1247decl_base_sptr
1248get_type_declaration(const type_base_sptr);
1249
1250bool
1251types_are_compatible(const type_base_sptr,
1252 const type_base_sptr);
1253
1254bool
1255types_are_compatible(const decl_base_sptr,
1256 const decl_base_sptr);
1257
1258const scope_decl*
1260 const scope_decl*);
1261
1262const scope_decl*
1263get_top_most_scope_under(const decl_base_sptr,
1264 const scope_decl*);
1265
1266const scope_decl*
1267get_top_most_scope_under(const decl_base_sptr,
1268 const scope_decl_sptr);
1269
1270void
1271fqn_to_components(const std::string&,
1272 std::list<string>&);
1273
1274string
1275components_to_type_name(const std::list<string>&);
1276
1279
1282
1284lookup_basic_type(const string&, const translation_unit&);
1285
1287lookup_basic_type(const type_decl&, const corpus&);
1288
1290lookup_basic_type(const string&, const corpus&);
1291
1294
1297
1299lookup_basic_type_per_location(const string&, const corpus&);
1300
1303
1306
1308lookup_class_type(const string&, const translation_unit&);
1309
1311lookup_class_type(const class_decl&, const corpus&);
1312
1315
1318
1321
1322bool
1324 const corpus&,
1326
1328lookup_class_types(const string&, const corpus&);
1329
1331lookup_union_types(const string&, const corpus&);
1332
1335
1337lookup_class_type_per_location(const string&, const corpus&);
1338
1340lookup_class_type(const string&, const corpus&);
1341
1343lookup_class_type_through_scopes(const std::list<string>&,
1344 const translation_unit&);
1345
1346union_decl_sptr
1348
1349union_decl_sptr
1351
1352union_decl_sptr
1354
1355union_decl_sptr
1356lookup_union_type_per_location(const string&, const corpus&);
1357
1358union_decl_sptr
1359lookup_union_type(const string&, const corpus&);
1360
1363
1365lookup_enum_type(const string&, const translation_unit&);
1366
1368lookup_enum_type(const enum_type_decl&, const corpus&);
1369
1371lookup_enum_type(const string&, const corpus&);
1372
1375
1378
1380lookup_enum_types(const string&, const corpus&);
1381
1384
1386lookup_enum_type_per_location(const string&, const corpus&);
1387
1390
1393
1395lookup_typedef_type(const interned_string& type_name,
1396 const translation_unit& tu);
1397
1399lookup_typedef_type(const string& type_name, const translation_unit& tu);
1400
1403
1406
1408lookup_typedef_type_per_location(const string&, const corpus &);
1409
1411lookup_typedef_type(const string&, const corpus&);
1412
1413type_base_sptr
1414lookup_class_or_typedef_type(const string&, const translation_unit&);
1415
1416type_base_sptr
1418
1419type_base_sptr
1420lookup_class_or_typedef_type(const string&, const corpus&);
1421
1422type_base_sptr
1423lookup_class_typedef_or_enum_type(const string&, const corpus&);
1424
1425qualified_type_def_sptr
1427
1428qualified_type_def_sptr
1429lookup_qualified_type(const string&, const translation_unit&);
1430
1431qualified_type_def_sptr
1433
1434qualified_type_def_sptr
1436
1439
1441lookup_pointer_type(const string&, const translation_unit&);
1442
1444lookup_pointer_type(const type_base_sptr& pointed_to_type,
1445 const translation_unit& tu);
1446
1449
1452
1455
1457lookup_reference_type(const string&, const translation_unit&);
1458
1460lookup_reference_type(const type_base_sptr& pointed_to_type,
1461 bool lvalue_reference,
1462 const translation_unit& tu);
1463
1466
1469
1472
1474lookup_array_type(const string&, const translation_unit&);
1475
1478
1481
1483lookup_function_type(const string&,
1484 const translation_unit&);
1485
1488 const translation_unit&);
1489
1492 const translation_unit&);
1493
1496 const translation_unit&);
1497
1500
1503
1506
1509
1510type_base_sptr
1511lookup_type(const string&, const translation_unit&);
1512
1513const type_base_sptr
1514lookup_type(const type_base_sptr, const translation_unit&);
1515
1516type_base_sptr
1517lookup_type(const interned_string&, const corpus&);
1518
1519type_base_sptr
1521
1522type_base_sptr
1523lookup_type(const type_base&, const corpus&);
1524
1525type_base_sptr
1526lookup_type(const type_base_sptr&, const corpus&);
1527
1528type_base_sptr
1529lookup_type_through_scopes(const std::list<string>&,
1530 const translation_unit&);
1531
1532type_base_sptr
1533lookup_type_through_translation_units(const string&, const corpus&);
1534
1535type_base_sptr
1536lookup_type_from_translation_unit(const string& type_name,
1537 const string& tu_path,
1538 const corpus& corp);
1539
1542 const corpus&);
1543
1544type_base_sptr
1545synthesize_type_from_translation_unit(const type_base_sptr&,
1547
1551
1552const type_base_sptr
1553lookup_type_in_scope(const string&,
1554 const scope_decl_sptr&);
1555
1556const type_base_sptr
1557lookup_type_in_scope(const std::list<string>&,
1558 const scope_decl_sptr&);
1559
1560const decl_base_sptr
1561lookup_var_decl_in_scope(const string&,
1562 const scope_decl_sptr&);
1563
1564const decl_base_sptr
1565lookup_var_decl_in_scope(const std::list<string>&,
1566 const scope_decl_sptr&);
1567
1568string
1569demangle_cplus_mangled_name(const string&);
1570
1571type_base_sptr
1572type_or_void(const type_base_sptr, const environment&);
1573
1574type_base_sptr
1575canonicalize(type_base_sptr);
1576
1577type_base*
1578type_has_non_canonicalized_subtype(type_base_sptr t);
1579
1580bool
1581type_has_sub_type_changes(type_base_sptr t_v1,
1582 type_base_sptr t_v2);
1583
1584void
1585keep_type_alive(type_base_sptr t);
1586
1587size_t
1588hash_type(const type_base *t);
1589
1590size_t
1592
1593size_t
1595
1596bool
1598
1599bool
1600is_non_canonicalized_type(const type_base_sptr&);
1601
1602bool
1603is_unique_type(const type_base_sptr&);
1604
1605bool
1607
1608/// For a given type, return its exemplar type.
1609///
1610/// For a given type, its exemplar type is either its canonical type
1611/// or the canonical type of the definition type of a given
1612/// declaration-only type. If the neither of those two types exist,
1613/// then the exemplar type is the given type itself.
1614///
1615/// @param type the input to consider.
1616///
1617/// @return the exemplar type.
1618type_base*
1619get_exemplar_type(const type_base* type);
1620
1621bool
1623
1624bool
1625types_have_similar_structure(const type_base_sptr& first,
1626 const type_base_sptr& second,
1627 bool indirect_type = false);
1628
1629bool
1631 const type_base* second,
1632 bool indirect_type = false);
1633
1634string
1636 bool is_anonymous,
1637 uint64_t size);
1638
1641 const regex::regex_t_sptr& r);
1642
1645 const regex::regex_t_sptr& regex);
1646} // end namespace ir
1647
1648using namespace abigail::ir;
1649
1650namespace suppr
1651{
1652class suppression_base;
1653
1654/// Convenience typedef for a shared pointer to a @ref suppression.
1655typedef shared_ptr<suppression_base> suppression_sptr;
1656
1657/// Convenience typedef for a vector of @ref suppression_sptr
1658typedef vector<suppression_sptr> suppressions_type;
1659
1660} // end namespace suppr
1661
1662namespace symtab_reader
1663{
1664
1665class symtab;
1666/// Convenience typedef for a shared pointer to a @ref symtab
1667typedef std::shared_ptr<symtab> symtab_sptr;
1668
1669} // end namespace symtab_reader
1670
1671void
1672dump(const decl_base_sptr, std::ostream&);
1673
1674void
1675dump(const decl_base_sptr);
1676
1677void
1678dump(const type_base_sptr, std::ostream&);
1679
1680void
1681dump(const type_base_sptr);
1682
1683void
1684dump(const var_decl_sptr, std::ostream&);
1685
1686void
1687dump(const var_decl_sptr);
1688
1689void
1690dump(const translation_unit&, std::ostream&);
1691
1692void
1693dump(const translation_unit&);
1694
1695void
1696dump(const translation_unit_sptr, std::ostream&);
1697
1698void
1700
1701void
1703
1704void
1706
1707void
1708dump_decl_location(const decl_base_sptr&);
1709
1710#ifndef ABG_ASSERT
1711/// This is a wrapper around the 'assert' glibc call. It allows for
1712/// its argument to have side effects, so that it keeps working when
1713/// the code of libabigail is compiled with the NDEBUG macro defined.
1714#define ABG_ASSERT(cond) do {({bool __abg_cond__ = bool(cond); assert(__abg_cond__); !!__abg_cond__;});} while (false)
1715#endif
1716
1717} // end namespace abigail
1718#endif // __ABG_IRFWD_H__
std::shared_ptr< symtab > symtab_sptr
Convenience typedef for a shared pointer to a symtab.
Definition: abg-fwd.h:1667
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:2519
Abstracts a class declaration.
Definition: abg-ir.h:4233
The base type of class_decl and union_decl.
Definition: abg-ir.h:4031
Abstract a class template.
Definition: abg-ir.h:3834
Abstraction of a group of corpora.
Definition: abg-corpus.h:383
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:1538
The abstraction for a data member context relationship. This relates a data member to its parent clas...
Definition: abg-ir.h:2954
Abstracts a declaration for an enum type.
Definition: abg-ir.h:2750
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:3111
Abstract a function template declaration.
Definition: abg-ir.h:3785
Abstraction of a function type.
Definition: abg-ir.h:3390
This abstracts the global scope of a given translation unit.
Definition: abg-ir.h:1952
The base class for the visitor type hierarchy used for traversing a translation unit.
Definition: abg-ir.h:4957
The entry point to manage locations.
Definition: abg-ir.h:441
The source location of a token.
Definition: abg-ir.h:299
Abstraction of a member function context relationship. This relates a member function to its parent c...
Definition: abg-ir.h:4558
Abstracts a member class template template.
Definition: abg-ir.h:4763
Abstract a member function template.
Definition: abg-ir.h:4708
Abstraction of the declaration of a method.
Definition: abg-ir.h:3929
Abstracts the type of a class member function.
Definition: abg-ir.h:3486
The abstraction of a namespace declaration.
Definition: abg-ir.h:2197
Abstracts non type template parameters.
Definition: abg-ir.h:3662
The abstraction of a pointer type.
Definition: abg-ir.h:2337
The abstraction of a pointer-to-member type.
Definition: abg-ir.h:2466
The abstraction of a qualified type.
Definition: abg-ir.h:2226
Abstracts a reference type.
Definition: abg-ir.h:2400
A declaration that introduces a scope.
Definition: abg-ir.h:1809
A type that introduces a scope.
Definition: abg-ir.h:2171
The base class of templates.
Definition: abg-ir.h:3544
Base class for a template parameter. Client code should use the more specialized type_template_parame...
Definition: abg-ir.h:3579
Abstracts a template template parameter.
Definition: abg-ir.h:3709
This is the abstraction of the set of relevant artefacts (types, variable declarations,...
Definition: abg-ir.h:686
An abstraction helper for type declarations.
Definition: abg-ir.h:1973
This abstracts a composition of types based on template type parameters. The result of the compositio...
Definition: abg-ir.h:3747
A basic type declaration that introduces no scope.
Definition: abg-ir.h:2108
The base class of both types and declarations.
Definition: abg-ir.h:1368
Abstracts a type template parameter.
Definition: abg-ir.h:3625
The abstraction of a typedef declaration.
Definition: abg-ir.h:2889
Abstracts a union type declaration.
Definition: abg-ir.h:4488
Abstracts a variable declaration.
Definition: abg-ir.h:3008
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:79
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:71
weak_ptr< diff_context > diff_context_wptr
Convenience typedef for a weak pointer of diff_context.
Definition: abg-fwd.h:74
The namespace of the internal representation of ABI artifacts like types and decls.
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:236
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:12485
bool is_non_canonicalized_type(const type_base *t)
Test if a given type is allowed to be non canonicalized.
Definition: abg-ir.cc:27732
shared_ptr< dm_context_rel > dm_context_rel_sptr
A convenience typedef for a shared pointer to dm_context_rel.
Definition: abg-fwd.h:252
bool get_member_function_is_dtor(const function_decl &f)
Test whether a member function is a destructor.
Definition: abg-ir.cc:6440
const type_base * peel_qualified_type(const type_base *type)
Return the leaf underlying type of a qualified type.
Definition: abg-ir.cc:7201
weak_ptr< typedef_decl > typedef_decl_wptr
Convenience typedef for a weak pointer on a typedef_decl.
Definition: abg-fwd.h:171
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:11972
shared_ptr< method_type > method_type_sptr
Convenience typedef for shared pointer to method_type.
Definition: abg-fwd.h:222
size_t hash_type(const type_base *t)
Hash an ABI artifact that is either a type.
Definition: abg-ir.cc:27709
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:11836
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:5767
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:6140
weak_ptr< var_decl > var_decl_wptr
Convenience typedef for a weak pointer on a var_decl.
Definition: abg-fwd.h:260
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:11623
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:5561
pointer_type_def_sptr is_pointer_to_npaf_type(const type_base_sptr &t)
Test if we are looking at a pointer to a neither-a-pointer-to-an-array-nor-a-function type.
Definition: abg-ir.cc:11081
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:9959
shared_ptr< function_decl > function_decl_sptr
Convenience typedef for a shared pointer on a function_decl.
Definition: abg-fwd.h:270
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:13553
pointer_type_def_sptr is_pointer_to_array_type(const type_base_sptr &t)
Test if a type is a pointer to array type.
Definition: abg-ir.cc:11063
shared_ptr< class_tdecl > class_tdecl_sptr
Convenience typedef for a shared pointer on a class_tdecl.
Definition: abg-fwd.h:290
weak_ptr< function_type > function_type_wptr
Convenience typedef for a weak pointer on a function_type.
Definition: abg-fwd.h:217
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:13715
void set_member_function_is_virtual(function_decl &f, bool is_virtual)
Set the virtual-ness of a member function.
Definition: abg-ir.cc:6665
ssize_t get_member_function_vtable_offset(const function_decl &f)
Get the vtable offset of a member function.
Definition: abg-ir.cc:6564
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:8719
qualified_type_def_sptr clone_qualified_type(const qualified_type_def_sptr &t)
Clone a qualifiend type.
Definition: abg-ir.cc:7552
const type_base * is_void_pointer_type(const type_base *t)
Test if a type is a pointer to void type.
Definition: abg-ir.cc:11314
bool is_type(const type_or_decl_base &tod)
Test whether a declaration is a type.
Definition: abg-ir.cc:10410
scope_decl * is_scope_decl(decl_base *d)
Test if a declaration is a scope_decl.
Definition: abg-ir.cc:5431
bool is_anonymous_data_member(const decl_base &d)
Test if a decl is an anonymous data member.
Definition: abg-ir.cc:5858
bool is_template_parameter(const shared_ptr< decl_base > decl)
Tests whether a decl is a template parameter.
Definition: abg-ir.cc:10284
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:7110
bool has_scope(const decl_base &d)
Tests if a declaration has got a scope.
Definition: abg-ir.cc:5385
void set_member_function_vtable_offset(function_decl &f, ssize_t s)
Set the vtable offset of a member function.
Definition: abg-ir.cc:6597
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:13112
type_base * get_exemplar_type(const type_base *type)
For a given type, return its exemplar type.
Definition: abg-ir.cc:27803
shared_ptr< non_type_tparameter > non_type_tparameter_sptr
Convenience typedef for shared pointer to non_type_template_parameter.
Definition: abg-fwd.h:321
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:10660
void remove_decl_from_scope(decl_base_sptr decl)
Remove a given decl from its scope.
Definition: abg-ir.cc:8394
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:10024
array_type_def_sptr clone_array(const array_type_def_sptr &array)
Clone an array type.
Definition: abg-ir.cc:7485
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:28284
const ptr_to_mbr_type * is_ptr_to_mbr_type(const type_or_decl_base *t, bool look_through_qualifiers)
Test whether a type is a ptr_to_mbr_type.
Definition: abg-ir.cc:11238
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:5704
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:12847
string get_enum_flat_representation(const enum_type_decl &enum_type, const string &indent, bool one_line, bool qualified_names)
Get the flat representation of an instance of enum_type_decl type.
Definition: abg-ir.cc:9579
bool is_user_defined_type(const type_base *t)
Test if a type is user-defined.
Definition: abg-ir.cc:5465
weak_ptr< class_decl > class_decl_wptr
Convenience typedef for a weak pointer on a class_decl.
Definition: abg-fwd.h:203
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:11862
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:10009
bool collect_non_anonymous_data_members(const class_or_union *cou, string_decl_base_sptr_map &dms)
Collect all the non-anonymous data members of a class or union type.
Definition: abg-ir.cc:5801
shared_ptr< global_scope > global_scope_sptr
Convenience typedef for shared pointer on global_scope.
Definition: abg-fwd.h:300
bool is_class_type(const type_or_decl_base &t)
Test whether a type is a class.
Definition: abg-ir.cc:10692
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:14798
shared_ptr< array_type_def > array_type_def_sptr
Convenience typedef for a shared pointer on a array_type_def.
Definition: abg-fwd.h:245
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:13137
bool is_declaration_only_class_or_union_type(const type_base *t, bool look_through_decl_only)
Test wheter a type is a declaration-only class.
Definition: abg-ir.cc:10876
string get_pretty_representation(const type_or_decl_base *tod, bool internal)
Build and return a copy of the pretty representation of an ABI artifact that could be either a type o...
Definition: abg-ir.cc:9201
bool is_anonymous_type(const type_base *t)
Test whether a declaration is a type.
Definition: abg-ir.cc:10461
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:13740
type_base_sptr peel_const_qualified_type(const qualified_type_def_sptr &q)
If a qualified type is const, then return its underlying type.
Definition: abg-ir.cc:7270
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:6044
type_decl * is_integral_type(const type_or_decl_base *t)
Test if a type is an integral type.
Definition: abg-ir.cc:10530
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:6100
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:13416
void set_member_function_is_dtor(function_decl &f, bool d)
Set the destructor-ness property of a member function.
Definition: abg-ir.cc:6468
const type_base_sptr peel_array_type(const type_base_sptr &type)
Return the leaf element type of an array.
Definition: abg-ir.cc:7159
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:12303
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:27947
shared_ptr< template_parameter > template_parameter_sptr
Convenience typedef for shared pointer to template parameter.
Definition: abg-fwd.h:315
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:10923
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:9841
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:5728
shared_ptr< class_decl > class_decl_sptr
Convenience typedef for a shared pointer on a class_decl.
Definition: abg-fwd.h:194
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:7346
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:6524
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:6852
namespace_decl_sptr is_namespace(const decl_base_sptr &d)
Tests if a declaration is a namespace declaration.
Definition: abg-ir.cc:11605
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:10512
decl_base * is_decl_slow(const type_or_decl_base *t)
Test if an ABI artifact is a declaration.
Definition: abg-ir.cc:10390
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:11494
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:11385
vector< class_decl_sptr > classes_type
Convenience typedef for a vector of class_decl_sptr.
Definition: abg-fwd.h:197
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:8605
typedef_decl_sptr is_typedef(const type_or_decl_base_sptr t)
Test whether a type is a typedef.
Definition: abg-ir.cc:10570
shared_ptr< template_tparameter > template_tparameter_sptr
Convenience typedef for a shared_ptr to template_tparameter.
Definition: abg-fwd.h:328
uint64_t get_var_size_in_bits(const var_decl_sptr &v)
Get the size of a given variable.
Definition: abg-ir.cc:6302
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:13583
string get_debug_representation(const type_or_decl_base *artifact)
Get the textual representation of a type for debugging purposes.
Definition: abg-ir.cc:9728
shared_ptr< function_type > function_type_sptr
Convenience typedef for a shared pointer on a function_type.
Definition: abg-fwd.h:211
shared_ptr< typedef_decl > typedef_decl_sptr
Convenience typedef for a shared pointer on a typedef_decl.
Definition: abg-fwd.h:168
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:14881
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:7054
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:12012
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:13087
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:11683
bool is_typedef_of_maybe_qualified_class_or_union_type(const type_base *t)
Test if a type is a typedef of a class or union type, or a typedef of a qualified class or union type...
Definition: abg-ir.cc:11141
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:7448
vector< function_type_sptr > function_types_type
Convenience typedef fo a vector of function_type_sptr.
Definition: abg-fwd.h:214
reference_type_def * is_reference_type(type_or_decl_base *t, bool look_through_qualifiers)
Test whether a type is a reference_type_def.
Definition: abg-ir.cc:11178
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:13340
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:6553
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:8413
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:10642
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:27895
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:10253
const global_scope * get_global_scope(const decl_base &decl)
return the global scope as seen by a given declaration.
Definition: abg-ir.cc:8462
shared_ptr< var_decl > var_decl_sptr
Convenience typedef for a shared pointer on a var_decl.
Definition: abg-fwd.h:257
shared_ptr< ptr_to_mbr_type > ptr_to_mbr_type_sptr
Convenience typedef for a shared pointer to a ptr_to_mbr_type.
Definition: abg-fwd.h:240
const location & get_natural_or_artificial_location(const decl_base *decl)
Get the non-artificial (natural) location of a decl.
Definition: abg-ir.cc:9869
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:27630
bool is_template_decl(const decl_base_sptr &decl)
Tests whether a decl is a template.
Definition: abg-ir.cc:11765
shared_ptr< scope_decl > scope_decl_sptr
Convenience typedef for a shared pointer on a scope_decl.
Definition: abg-fwd.h:265
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:121
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:12241
shared_ptr< translation_unit > translation_unit_sptr
Convenience typedef for a shared pointer on a translation_unit type.
Definition: abg-fwd.h:137
shared_ptr< environment > environment_sptr
Convenience typedef for a shared pointer to an environment.
Definition: abg-fwd.h:114
bool is_data_member_of_anonymous_class_or_union(const var_decl &d)
Test if a var_decl is a data member belonging to an anonymous type.
Definition: abg-ir.cc:5976
const type_base * is_void_pointer_type_equivalent(const type_base *type)
Test if a type is equivalent to a pointer to void type.
Definition: abg-ir.cc:11277
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:12502
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:27567
unordered_map< string, decl_base_sptr > string_decl_base_sptr_map
Convenience typedef for a map which key is a string and which value is a decl_base_sptr.
Definition: abg-fwd.h:158
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:12195
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:12418
bool get_data_member_is_laid_out(const var_decl &m)
Test whether a data member is laid out.
Definition: abg-ir.cc:6330
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:12049
type_base_sptr canonicalize(type_base_sptr t)
Compute the canonical type of a given type.
Definition: abg-ir.cc:15627
bool get_member_function_is_const(const function_decl &f)
Test whether a member function is const.
Definition: abg-ir.cc:6496
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:8951
shared_ptr< pointer_type_def > pointer_type_def_sptr
Convenience typedef for a shared pointer on a pointer_type_def.
Definition: abg-fwd.h:227
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
bool is_const_qualified_type(const qualified_type_def_sptr &t)
Test if a given qualified type is const.
Definition: abg-ir.cc:7238
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:14045
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:6215
uint64_t get_absolute_data_member_offset(const var_decl &m)
Get the absolute offset of a data member.
Definition: abg-ir.cc:6259
shared_ptr< ir_traversable_base > ir_traversable_base_sptr
Convenience typedef for a shared pointer to ir_traversable_base.
Definition: abg-fwd.h:110
bool is_member_function(const function_decl &f)
Test whether a function_decl is a member function.
Definition: abg-ir.cc:6354
var_decl * is_var_decl(const type_or_decl_base *tod)
Tests if a declaration is a variable declaration.
Definition: abg-ir.cc:11586
decl_base * is_decl(const type_or_decl_base *d)
Test if an ABI artifact is a declaration.
Definition: abg-ir.cc:10350
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:27605
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:12347
bool is_member_type(const type_base_sptr &t)
Tests if a type is a class member.
Definition: abg-ir.cc:5450
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:9423
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 and if the d...
Definition: abg-ir.cc:8370
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:28238
bool is_npaf_type(const type_base_sptr &t)
Test if a type is a neither a pointer, an array nor a function type.
Definition: abg-ir.cc:10497
shared_ptr< enum_type_decl > enum_type_decl_sptr
Convenience typedef for shared pointer to a enum_type_decl.
Definition: abg-fwd.h:176
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:6153
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:6717
uint64_t get_data_member_offset(const var_decl &m)
Get the offset of a data member.
Definition: abg-ir.cc:6170
vector< class_or_union_sptr > classes_or_unions_type
Convenience typedef for a vector of class_or_union_sptr.
Definition: abg-fwd.h:200
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:10210
bool get_member_function_is_virtual(const function_decl &f)
Test if a given member function is virtual.
Definition: abg-ir.cc:6627
const pointer_type_def * is_pointer_type(const type_or_decl_base *t, bool look_through_qualifiers)
Test whether a type is a pointer_type_def.
Definition: abg-ir.cc:11006
string get_class_or_enum_flat_representation(const type_base &coe, const string &indent, bool one_line, bool internal, bool qualified_name)
Get the flat representation of an instance of enum_type_decl type.
Definition: abg-ir.cc:9700
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:6016
location get_location(const type_base_sptr &type)
Get the location of the declaration of a given type.
Definition: abg-ir.cc:8685
pointer_type_def_sptr is_pointer_to_function_type(const type_base_sptr &t)
Test if a type is a pointer to function type.
Definition: abg-ir.cc:11046
weak_ptr< decl_base > decl_base_wptr
Convenience typedef for a weak pointer to a decl_base.
Definition: abg-fwd.h:182
var_decl_sptr has_fake_flexible_array_data_member(const class_decl &klass)
Test if the last data member of a class is an array with one element.
Definition: abg-ir.cc:10803
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:9028
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:11637
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:11445
bool is_union_type(const type_or_decl_base &t)
Test if a type is a union_decl.
Definition: abg-ir.cc:10972
const location & get_artificial_or_natural_location(const decl_base *decl)
Get the artificial location of a decl.
Definition: abg-ir.cc:9888
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:12117
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:7000
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:13371
shared_ptr< template_decl > template_decl_sptr
Convenience typedef for a shared pointer to template_decl.
Definition: abg-fwd.h:307
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:11721
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:12367
bool is_global_scope(const scope_decl &scope)
Tests whether if a given scope is the global scope.
Definition: abg-ir.cc:10155
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:6316
pointer_type_def_sptr is_pointer_to_ptr_to_mbr_type(const type_base_sptr &t)
Test if we are looking at a pointer to pointer to member type.
Definition: abg-ir.cc:11098
bool is_data_member(const var_decl &v)
Test if a var_decl is a data member.
Definition: abg-ir.cc:5599
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:28263
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:13320
const decl_base * get_type_declaration(const type_base *t)
Get the declaration for a given type.
Definition: abg-ir.cc:10043
var_decl_sptr has_flexible_array_data_member(const class_decl &klass)
Test if the last data member of a class is an array with non-finite data member.
Definition: abg-ir.cc:10733
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:26030
array_type_def * is_array_type(const type_or_decl_base *type, bool look_through_qualifiers)
Test if a type is an array_type_def.
Definition: abg-ir.cc:11650
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:9121
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:280
interned_string get_function_id_or_pretty_representation(const function_decl *fn)
Get the ID of a function, or, if the ID can designate several different functions,...
Definition: abg-ir.cc:9093
shared_ptr< type_decl > type_decl_sptr
Convenience typedef for a shared pointer on a type_decl.
Definition: abg-fwd.h:162
typedef_decl_sptr clone_typedef(const typedef_decl_sptr &t)
Clone a typedef type.
Definition: abg-ir.cc:7527
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:13208
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:12779
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:6975
translation_unit * get_translation_unit(const decl_base &decl)
Return the translation unit a declaration belongs to.
Definition: abg-ir.cc:10126
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:9908
shared_ptr< namespace_decl > namespace_decl_sptr
Convenience typedef for a shared pointer on namespace_decl.
Definition: abg-fwd.h:285
string demangle_cplus_mangled_name(const string &mangled_name)
Demangle a C++ mangled name and return the resulting string.
Definition: abg-ir.cc:14955
bool is_unique_type(const type_base_sptr &t)
Test if a type is unique in the entire environment.
Definition: abg-ir.cc:27768
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:10077
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:8754
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:8506
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:7605
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:8929
bool is_at_template_scope(const shared_ptr< decl_base > decl)
Tests whether a given decl is at template scope.
Definition: abg-ir.cc:10275
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:13678
function_decl * is_function_decl(const type_or_decl_base *d)
Test whether a declaration is a function_decl.
Definition: abg-ir.cc:10298
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:27589
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:11415
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:11365
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:12155
bool is_typedef_ptr_or_ref_to_decl_only_class_or_union_type(const type_base *t)
Test if a type is a typedef, pointer or reference to a decl-only class/union.
Definition: abg-ir.cc:11118
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:12082
bool class_or_union_types_of_same_kind(const class_or_union *first, const class_or_union *second)
Test if two class or union types are of the same kind.
Definition: abg-ir.cc:10944
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:8651
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:11475
shared_ptr< function_tdecl > function_tdecl_sptr
Convenience typedef for a shared pointer on a function_tdecl.
Definition: abg-fwd.h:295
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:10609
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:7295
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:14985
bool is_at_global_scope(const decl_base &decl)
Tests whether a given declaration is at global scope.
Definition: abg-ir.cc:10183
vector< enum_type_decl_sptr > enums_type
Convenience typedef for a vector of enum_type_decl_sptr.
Definition: abg-fwd.h:179
bool is_member_decl(const decl_base_sptr d)
Tests if a declaration is a class member.
Definition: abg-ir.cc:5403
bool get_member_function_is_ctor(const function_decl &f)
Test whether a member function is a constructor.
Definition: abg-ir.cc:6381
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:6411
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:1658
shared_ptr< suppression_base > suppression_sptr
Convenience typedef for a shared pointer to a suppression.
Definition: abg-fwd.h:1655
bool base_name(string const &path, string &file_name)
Return the file name part of a file part.
Toplevel namespace for libabigail.
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:4867
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:5007
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:462