libabigail
Loading...
Searching...
No Matches
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-2025 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
26/// Toplevel namespace for libabigail.
27namespace abigail
28{
29/**
30 @mainpage libabigail
31
32 This is the API documentation of the Application Binary
33 Interface Generic Analysis and Instrumentation Library, aka,
34 <em>libabigail</em>.
35
36 Check out <a href="http://sourceware.org/libabigail"> the project
37 homepage</a>!
38
39 The current libabigail source code can be browsed at
40 http://sourceware.org/git/gitweb.cgi?p=libabigail.git
41
42 It can be checked out with:
43 <em>git clone git://sourceware.org/git/libabigail.git</em>
44
45 The mailing list to send messages and patches to is
46 libabigail@sourceware.org.
47
48 You can hang out with libabigail developers and users on irc at
49 irc://irc.oftc.net\#libabigail.
50*/
51
52// Inject some types.
53using std::shared_ptr;
54using std::weak_ptr;
55using std::unordered_map;
56using std::string;
57using std::vector;
58using std::unordered_set;
59
60typedef unordered_set<string> string_set_type;
61
62// Pull in relational operators.
63using namespace std::rel_ops;
64
65namespace comparison
66{
67class diff_context;
68
69/// Convenience typedef for a shared pointer of @ref diff_context.
70typedef shared_ptr<diff_context> diff_context_sptr;
71
72/// Convenience typedef for a weak pointer of @ref diff_context.
73typedef weak_ptr<diff_context> diff_context_wptr;
74
75class diff;
76
77/// Convenience typedef for a shared_ptr for the @ref diff class
78typedef shared_ptr<diff> diff_sptr;
79
80/// Convenience typedef for a weak_ptr for the @ref diff class
81typedef weak_ptr<diff> diff_wptr;
82}
83
84namespace regex
85{
86/// A convenience typedef for a shared pointer of regex_t.
87typedef std::shared_ptr<regex_t> regex_t_sptr;
88}// end namespace regex
89
90namespace ir
91{
92
93// Forward declarations for corpus.
94
95class corpus;
96typedef shared_ptr<corpus> corpus_sptr;
97
98class corpus_group;
99typedef shared_ptr<corpus_group> corpus_group_sptr;
100
101// Forward declarations for ir.
102
103class ir_node_visitor;
104
106
107/// Convenience typedef for a shared pointer to @ref
108/// ir_traversable_base.
109typedef shared_ptr<ir_traversable_base> ir_traversable_base_sptr;
110
111class environment;
112/// Convenience typedef for a shared pointer to an @ref environment
113typedef shared_ptr<environment> environment_sptr;
114
115class location;
116class location_manager;
117
119/// A convenience typedef for a shared_ptr to @ref type_or_decl_base.
120typedef shared_ptr<type_or_decl_base> type_or_decl_base_sptr;
121
122class type_base;
123
124// Convenience typedef for a shared pointer on a @ref type_base
125typedef shared_ptr<type_base> type_base_sptr;
126
127/// Convenience typedef for a weak pointer on a @ref type_base
128typedef weak_ptr<type_base> type_base_wptr;
129
130/// Convenience typedef for a weak pointer to a @ref corpus.
131typedef weak_ptr<corpus> corpus_wptr;
132
133class translation_unit;
134/// Convenience typedef for a shared pointer on a @ref
135/// translation_unit type.
136typedef shared_ptr<translation_unit> translation_unit_sptr;
137/// Convenience typedef for a map that associates a string to a
138/// translation unit.
139typedef unordered_map<string, translation_unit_sptr> string_tu_map_type;
140
141/// A convenience typedef for a vector of type_base_wptr.
142typedef vector<type_base_wptr> type_base_wptrs_type;
143
144/// A convenience typedef for a map which key is an interned_string
145/// and which value is a vector of type_base_wptr.
146typedef unordered_map<interned_string,
149
150class decl_base;
151
152// Convenience typedef for a smart pointer on @ref decl_base.
153typedef shared_ptr<decl_base> decl_base_sptr;
154
155/// Convenience typedef for a map which key is a string and which
156/// value is a @ref decl_base_sptr.
157typedef unordered_map<string, decl_base_sptr> string_decl_base_sptr_map;
158
159class type_decl;
160/// Convenience typedef for a shared pointer on a @ref type_decl.
161typedef shared_ptr<type_decl> type_decl_sptr;
162
163
164class typedef_decl;
165
166/// Convenience typedef for a shared pointer on a @ref typedef_decl.
167typedef shared_ptr<typedef_decl> typedef_decl_sptr;
168
169/// Convenience typedef for a weak pointer on a @ref typedef_decl.
170typedef weak_ptr<typedef_decl> typedef_decl_wptr;
171
172class enum_type_decl;
173
174/// Convenience typedef for shared pointer to a @ref enum_type_decl.
175typedef shared_ptr<enum_type_decl> enum_type_decl_sptr;
176
177/// Convenience typedef for a vector of @ref enum_type_decl_sptr
178typedef vector<enum_type_decl_sptr> enums_type;
179
180/// Convenience typedef for a weak pointer to a @ref decl_base.
181typedef weak_ptr<decl_base> decl_base_wptr;
182
183class class_or_union;
184
185typedef shared_ptr<class_or_union> class_or_union_sptr;
186typedef weak_ptr<class_or_union> class_or_union_wptr;
187
188class scope_type_decl;
189
190class class_decl;
191
192/// Convenience typedef for a shared pointer on a @ref class_decl
193typedef shared_ptr<class_decl> class_decl_sptr;
194
195/// Convenience typedef for a vector of @ref class_decl_sptr
196typedef vector<class_decl_sptr> classes_type;
197
198/// Convenience typedef for a vector of @ref class_or_union_sptr
199typedef vector<class_or_union_sptr> classes_or_unions_type;
200
201/// Convenience typedef for a weak pointer on a @ref class_decl.
202typedef weak_ptr<class_decl> class_decl_wptr;
203
204class union_decl;
205
206typedef shared_ptr<union_decl> union_decl_sptr;
207
208class function_type;
209/// Convenience typedef for a shared pointer on a @ref function_type
210typedef shared_ptr<function_type> function_type_sptr;
211
212/// Convenience typedef fo a vector of @ref function_type_sptr
213typedef vector<function_type_sptr> function_types_type;
214
215/// Convenience typedef for a weak pointer on a @ref function_type
216typedef weak_ptr<function_type> function_type_wptr;
217
218class method_type;
219
220/// Convenience typedef for shared pointer to @ref method_type.
221typedef shared_ptr<method_type> method_type_sptr;
222
223class pointer_type_def;
224
225/// Convenience typedef for a shared pointer on a @ref pointer_type_def
226typedef shared_ptr<pointer_type_def> pointer_type_def_sptr;
227
229
230typedef shared_ptr<qualified_type_def> qualified_type_def_sptr;
231
233
234/// Convenience typedef for a shared pointer on a @ref reference_type_def
235typedef shared_ptr<reference_type_def> reference_type_def_sptr;
236
237class ptr_to_mbr_type;
238/// Convenience typedef for a shared pointer to a @ref ptr_to_mbr_type
239typedef shared_ptr<ptr_to_mbr_type> ptr_to_mbr_type_sptr;
240
241class array_type_def;
242
243/// Convenience typedef for a shared pointer on a @ref array_type_def
244typedef shared_ptr<array_type_def> array_type_def_sptr;
245
246class subrange_type;
247
248class dm_context_rel;
249
250/// A convenience typedef for a shared pointer to dm_context_rel.
251typedef shared_ptr<dm_context_rel> dm_context_rel_sptr;
252
253class var_decl;
254
255/// Convenience typedef for a shared pointer on a @ref var_decl
256typedef shared_ptr<var_decl> var_decl_sptr;
257
258/// Convenience typedef for a weak pointer on a @ref var_decl
259typedef weak_ptr<var_decl> var_decl_wptr;
260
261class scope_decl;
262
263/// Convenience typedef for a shared pointer on a @ref scope_decl.
264typedef shared_ptr<scope_decl> scope_decl_sptr;
265
266class function_decl;
267
268/// Convenience typedef for a shared pointer on a @ref function_decl
269typedef shared_ptr<function_decl> function_decl_sptr;
270
271class method_decl;
272
273typedef shared_ptr<method_decl> method_decl_sptr;
274
276
277/// A convenience typedef for a shared pointer to @ref
278/// mem_fn_context_rel.
279typedef shared_ptr<mem_fn_context_rel> mem_fn_context_rel_sptr;
280
281class namespace_decl;
282
283/// Convenience typedef for a shared pointer on namespace_decl.
284typedef shared_ptr<namespace_decl> namespace_decl_sptr;
285
286class class_tdecl;
287
288/// Convenience typedef for a shared pointer on a @ref class_tdecl
289typedef shared_ptr<class_tdecl> class_tdecl_sptr;
290
291class function_tdecl;
292
293/// Convenience typedef for a shared pointer on a @ref function_tdecl
294typedef shared_ptr<function_tdecl> function_tdecl_sptr;
295
296class global_scope;
297
298/// Convenience typedef for shared pointer on @ref global_scope.
299typedef shared_ptr<global_scope> global_scope_sptr;
300
301class node_visitor;
302
303class template_decl;
304
305/// Convenience typedef for a shared pointer to @ref template_decl
306typedef shared_ptr<template_decl> template_decl_sptr;
307
308/// Convenience typedef for a weak pointer to template_decl
309typedef weak_ptr<template_decl> template_decl_wptr;
310
312
313/// Convenience typedef for shared pointer to template parameter
314typedef shared_ptr<template_parameter> template_parameter_sptr;
315
317
318/// Convenience typedef for shared pointer to @ref
319/// non_type_template_parameter
320typedef shared_ptr<non_type_tparameter> non_type_tparameter_sptr;
321
322class type_tparameter;
323
325
326/// Convenience typedef for a shared_ptr to @ref template_tparameter.
327typedef shared_ptr<template_tparameter> template_tparameter_sptr;
328
329/// Convenience typedef for a shared pointer to @ref type_tparameter.
330typedef shared_ptr<type_tparameter> type_tparameter_sptr;
331
332class type_composition;
333
335typedef shared_ptr<member_function_template> member_function_template_sptr;
336typedef vector<member_function_template_sptr> member_function_templates;
337
339typedef shared_ptr<member_class_template> member_class_template_sptr;
340typedef vector<member_class_template_sptr> member_class_templates;
341
342/// Convenience typedef for shared pointer to type_composition
343typedef shared_ptr<type_composition> type_composition_sptr;
344
345decl_base_sptr
346add_decl_to_scope(decl_base_sptr, scope_decl*);
347
348decl_base_sptr
349add_decl_to_scope(decl_base_sptr, const scope_decl_sptr&);
350
351const global_scope*
353
354const global_scope*
356
357const global_scope*
358get_global_scope(const decl_base_sptr);
359
362
365
368
369bool
371
372const global_scope*
374
375bool
377
378bool
380
381bool
382is_at_global_scope(const decl_base_sptr);
383
384bool
386
388is_at_class_scope(const decl_base_sptr);
389
392
395
396bool
397is_at_template_scope(const decl_base_sptr);
398
399bool
400is_template_parameter(const decl_base_sptr);
401
404
407
408bool
410
413
414decl_base_sptr
416
419
420decl_base_sptr
422
423bool
425
428
429type_base_sptr
431
432bool
434
435bool
436is_anonymous_type(const type_base_sptr&);
437
438bool
439is_npaf_type(const type_base_sptr&);
440
441const type_decl*
443
446
449
452
455
458
461
462const typedef_decl*
464
465const typedef_decl*
466is_typedef(const type_base*);
467
470
471const enum_type_decl*
473
475is_compatible_with_enum_type(const type_base_sptr&);
476
478is_compatible_with_enum_type(const decl_base_sptr&);
479
482
483const enum_type_decl*
485
486bool
488
491
494
497
500
503
506
509
512
513bool
515 bool look_through_decl_only = false);
516
517bool
518is_declaration_only_class_or_union_type(const type_base_sptr& t,
519 bool look_through_decl_only = false);
520
523
524class_or_union_sptr
526
527bool
529 const class_or_union*);
530
531bool
532class_or_union_types_of_same_kind(const class_or_union_sptr&,
533 const class_or_union_sptr&);
534
535bool
537
540
541union_decl_sptr
543
544const class_decl*
546
548is_compatible_with_class_type(const type_base_sptr&);
549
551is_compatible_with_class_type(const decl_base_sptr&);
552
553const pointer_type_def*
555 bool look_through_qualifiers=false);
556
559 bool look_through_qualifiers=false);
560
562is_pointer_to_function_type(const type_base_sptr&);
563
565is_pointer_to_array_type(const type_base_sptr&);
566
568is_pointer_to_ptr_to_mbr_type(const type_base_sptr&);
569
571is_pointer_to_npaf_type(const type_base_sptr&);
572
573bool
575
576bool
578
579bool
581
583is_reference_type(type_or_decl_base*, bool look_through_qualifiers=false);
584
586is_reference_type(const type_or_decl_base*, bool look_through_qualifiers=false);
587
590 bool look_through_qualifiers=false);
591
592const ptr_to_mbr_type*
594 bool look_through_qualifiers=false);
595
598 bool look_through_qualifiers=false);
599
600const type_base*
602
603const type_base_sptr
604is_void_pointer_type(const type_base_sptr&);
605
606const type_base*
608
609const type_base*
611
614
615qualified_type_def_sptr
617
618bool
619is_const_qualified_type(const type_base_sptr& t);
620
621bool
622is_const_qualified_type(const qualified_type_def_sptr&);
623
624type_base_sptr
625peel_const_qualified_type(const qualified_type_def_sptr&);
626
629
632
633const function_type*
635
638
639const method_type*
641
644
645class_or_union_sptr
647
648class_or_union_sptr
649look_through_decl_only_class(class_or_union_sptr);
650
653
656
659
660decl_base_sptr
662
665
666decl_base_sptr
667look_through_decl_only(const decl_base_sptr&);
668
671
672type_base_sptr
673look_through_decl_only_type(const type_base_sptr&);
674
677
680
682is_namespace(const decl_base_sptr&);
683
685is_namespace(const decl_base*);
686
687bool
688is_template_parm_composition_type(const decl_base_sptr);
689
690bool
691is_template_decl(const decl_base_sptr);
692
693bool
694is_function_template_pattern(const decl_base_sptr);
695
696
697decl_base_sptr
698insert_decl_into_scope(decl_base_sptr,
699 vector<decl_base_sptr >::iterator,
700 scope_decl*);
701
702decl_base_sptr
703insert_decl_into_scope(decl_base_sptr,
704 vector<decl_base_sptr >::iterator,
706
707bool
708has_scope(const decl_base&);
709
710bool
711has_scope(const decl_base_sptr);
712
713bool
714is_member_decl(const decl_base_sptr);
715
716bool
718
719bool
721
722const scope_decl*
724
726is_scope_decl(const decl_base_sptr&);
727
728bool
729is_member_type(const type_base_sptr&);
730
731bool
733
734bool
735is_user_defined_type(const type_base_sptr&);
736
737void
738remove_decl_from_scope(decl_base_sptr);
739
740bool
742
743bool
745
746bool
747get_member_is_static(const decl_base_sptr&);
748
749void
751
752void
753set_member_is_static(const decl_base_sptr&, bool);
754
755bool
757
760
761bool
763
766
767bool
769
771is_data_member(const decl_base_sptr&);
772
775
778
779const var_decl_sptr
780get_next_data_member(const class_or_union_sptr&, const var_decl_sptr&);
781
784
787
789get_last_data_member(const class_or_union_sptr&);
790
791bool
793
794bool
795collect_non_anonymous_data_members(const class_or_union_sptr &cou, string_decl_base_sptr_map& dms);
796
797bool
799
800const var_decl*
802
803const var_decl*
805
808
810is_anonymous_data_member(const decl_base_sptr&);
811
814
815const var_decl*
817
818bool
820
821bool
823
824bool
826
827bool
829
830const var_decl_sptr
832
835 const string&);
836
839
840class_or_union_sptr
842
843class_or_union_sptr
845
846bool
848 const class_or_union& clazz);
849
850bool
852
853const class_or_union_sptr
855
856const class_or_union_sptr
858
859const class_or_union_sptr
861
864 bool look_through_qualifiers = false);
865
868 bool look_through_qualifiers = false);
869
871is_array_of_qualified_element(const type_base_sptr&);
872
873qualified_type_def_sptr
875
877is_typedef_of_array(const type_base_sptr&);
878
879void
881
882uint64_t
884
885uint64_t
887
888uint64_t
889get_data_member_offset(const decl_base_sptr);
890
891uint64_t
893
894bool
896 const var_decl_sptr&,
897 uint64_t&);
898
899bool
900get_next_data_member_offset(const class_or_union_sptr&,
901 const var_decl_sptr&,
902 uint64_t&);
903
904uint64_t
906
907void
909
910bool
912
913bool
915
916bool
918
919bool
921
922bool
924
925bool
927
928bool
930
931void
933
934void
936
937bool
939
940bool
942
943void
945
946void
948
949bool
951
952bool
954
955void
957
958void
960
961bool
963
964ssize_t
966
967ssize_t
969
970bool
972
973bool
975
976bool
978
979void
981void
983void
985
986type_base_sptr
987strip_typedef(const type_base_sptr);
988
989decl_base_sptr
990strip_useless_const_qualification(const qualified_type_def_sptr t);
991
992void
993strip_redundant_quals_from_underyling_types(const qualified_type_def_sptr&);
994
995type_base_sptr
996peel_typedef_type(const type_base_sptr&);
997
998const type_base*
1000
1001type_base_sptr
1002peel_pointer_type(const type_base_sptr&);
1003
1004const type_base*
1006
1007type_base_sptr
1008peel_reference_type(const type_base_sptr&);
1009
1010const type_base*
1012
1013const type_base_sptr
1014peel_array_type(const type_base_sptr&);
1015
1016const type_base*
1018
1019const type_base*
1021
1022const type_base_sptr
1023peel_qualified_type(const type_base_sptr&);
1024
1025type_base*
1027
1028type_base_sptr
1029peel_qualified_or_typedef_type(const type_base_sptr &type);
1030
1031type_base_sptr
1032peel_typedef_pointer_or_reference_type(const type_base_sptr);
1033
1034type_base*
1036
1037type_base*
1039 bool peel_qual_type);
1040
1041type_base*
1043 bool peel_qualified_type = true);
1044
1046clone_array(const array_type_def_sptr& array);
1047
1050
1051qualified_type_def_sptr
1052clone_qualified_type(const qualified_type_def_sptr& t);
1053
1054type_base_sptr
1055clone_array_tree(const type_base_sptr t);
1056
1057string
1058get_name(const type_or_decl_base*, bool qualified = true);
1059
1060string
1062 bool qualified = true);
1063
1065get_location(const type_base_sptr& type);
1066
1068get_location(const decl_base_sptr& decl);
1069
1070string
1071build_qualified_name(const scope_decl* scope, const string& name);
1072
1073string
1074build_qualified_name(const scope_decl* scope,
1075 const type_base_sptr& type);
1076
1079
1081get_type_scope(const type_base_sptr&);
1082
1084get_type_name(const type_base_sptr&,
1085 bool qualified = true,
1086 bool internal = false);
1087
1090 bool qualified = true,
1091 bool internal = false);
1092
1095 bool qualified = true,
1096 bool internal = false);
1097
1099get_name_of_pointer_to_type(const type_base& pointed_to_type,
1100 bool qualified = true,
1101 bool internal = false);
1102
1104get_name_of_reference_to_type(const type_base& pointed_to_type,
1105 bool lvalue_reference = false,
1106 bool qualified = true,
1107 bool internal = false);
1108
1111 bool internal = false);
1112
1114get_function_type_name(const function_type*, bool internal = false);
1115
1117get_function_type_name(const function_type&, bool internal = false);
1118
1121
1123get_method_type_name(const method_type_sptr&, bool internal = false);
1124
1126get_method_type_name(const method_type*, bool internal = false);
1127
1129get_method_type_name(const method_type&, bool internal = false);
1130
1131string
1132get_pretty_representation(const decl_base*, bool internal = false);
1133
1134string
1135get_pretty_representation(const type_base*, bool internal = false);
1136
1137string
1138get_pretty_representation(const type_or_decl_base*, bool internal = false);
1139
1140string
1142 bool internal = false);
1143
1144string
1145get_pretty_representation(const decl_base_sptr&, bool internal = false);
1146
1147string
1148get_pretty_representation(const type_base_sptr&, bool internal = false);
1149
1150string
1151get_pretty_representation(const function_type&, bool internal = false);
1152
1153string
1154get_pretty_representation(const function_type*, bool internal = false);
1155
1156string
1158 bool internal = false);
1159
1160string
1161get_pretty_representation(const method_type&, bool internal = false);
1162
1163string
1164get_pretty_representation(const method_type*, bool internal = false);
1165
1166string
1168 bool internal = false);
1169
1170string
1172 const string& indent,
1173 bool one_line,
1174 bool internal,
1175 bool qualified_name = true);
1176
1177string
1179 const string& indent,
1180 bool one_line,
1181 bool internal,
1182 bool qualified_name = true);
1183
1184string
1185get_class_or_union_flat_representation(const class_or_union_sptr& cou,
1186 const string& indent,
1187 bool one_line,
1188 bool internal,
1189 bool qualified_name = true);
1190
1191string
1193 const string& indent,
1194 bool one_line,
1195 bool internal,
1196 bool qualified_names);
1197
1198string
1200 const string& indent,
1201 bool one_line,
1202 bool internal,
1203 bool qualified_names);
1204
1205string
1207 const string& indent,
1208 bool one_line,
1209 bool qualified_names);
1210
1211string
1213 const string& indent,
1214 bool one_line,
1215 bool internal,
1216 bool qualified_name);
1217
1218string
1220
1222get_data_member(class_or_union *, const char*);
1223
1225get_data_member(type_base *clazz, const char* member_name);
1226
1227const location&
1229
1230const location&
1232
1234debug(const type_or_decl_base* artifact);
1235
1236type_base*
1237debug(const type_base* artifact);
1238
1239decl_base*
1240debug(const decl_base* artifact);
1241
1242bool
1244
1245void
1246debug_comp_stack(const environment& env);
1247
1248bool
1250
1251const decl_base*
1253
1254decl_base*
1256
1257decl_base_sptr
1258get_type_declaration(const type_base_sptr);
1259
1260bool
1261classes_have_same_layout(const type_base_sptr& f,
1262 const type_base_sptr& s);
1263
1264bool
1265types_are_compatible(const type_base_sptr,
1266 const type_base_sptr);
1267
1268bool
1269types_are_compatible(const decl_base_sptr,
1270 const decl_base_sptr);
1271
1272const scope_decl*
1274 const scope_decl*);
1275
1276const scope_decl*
1277get_top_most_scope_under(const decl_base_sptr,
1278 const scope_decl*);
1279
1280const scope_decl*
1281get_top_most_scope_under(const decl_base_sptr,
1282 const scope_decl_sptr);
1283
1284void
1285fqn_to_components(const std::string&,
1286 std::list<string>&);
1287
1288string
1289components_to_type_name(const std::list<string>&);
1290
1293
1296
1298lookup_basic_type(const string&, const translation_unit&);
1299
1301lookup_basic_type(const type_decl&, const corpus&);
1302
1304lookup_basic_type(const string&, const corpus&);
1305
1308
1311
1313lookup_basic_type_per_location(const string&, const corpus&);
1314
1317
1320
1322lookup_class_type(const string&, const translation_unit&);
1323
1325lookup_class_type(const class_decl&, const corpus&);
1326
1329
1332
1335
1336bool
1338 const corpus&,
1340
1342lookup_class_types(const string&, const corpus&);
1343
1345lookup_union_types(const string&, const corpus&);
1346
1349
1351lookup_class_type_per_location(const string&, const corpus&);
1352
1354lookup_class_type(const string&, const corpus&);
1355
1357lookup_class_type_through_scopes(const std::list<string>&,
1358 const translation_unit&);
1359
1360union_decl_sptr
1362
1363union_decl_sptr
1365
1366union_decl_sptr
1368
1369union_decl_sptr
1370lookup_union_type_per_location(const string&, const corpus&);
1371
1372union_decl_sptr
1373lookup_union_type(const string&, const corpus&);
1374
1377
1379lookup_enum_type(const string&, const translation_unit&);
1380
1382lookup_enum_type(const enum_type_decl&, const corpus&);
1383
1385lookup_enum_type(const string&, const corpus&);
1386
1389
1392
1394lookup_enum_types(const string&, const corpus&);
1395
1398
1400lookup_enum_type_per_location(const string&, const corpus&);
1401
1404
1407
1409lookup_typedef_type(const interned_string& type_name,
1410 const translation_unit& tu);
1411
1413lookup_typedef_type(const string& type_name, const translation_unit& tu);
1414
1417
1420
1422lookup_typedef_type_per_location(const string&, const corpus &);
1423
1425lookup_typedef_type(const string&, const corpus&);
1426
1427type_base_sptr
1428lookup_class_or_typedef_type(const string&, const translation_unit&);
1429
1430type_base_sptr
1432
1433type_base_sptr
1434lookup_class_or_typedef_type(const string&, const corpus&);
1435
1436type_base_sptr
1437lookup_class_typedef_or_enum_type(const string&, const corpus&);
1438
1439qualified_type_def_sptr
1441
1442qualified_type_def_sptr
1443lookup_qualified_type(const string&, const translation_unit&);
1444
1445qualified_type_def_sptr
1447
1448qualified_type_def_sptr
1450
1453
1455lookup_pointer_type(const string&, const translation_unit&);
1456
1458lookup_pointer_type(const type_base_sptr& pointed_to_type,
1459 const translation_unit& tu);
1460
1463
1466
1469
1471lookup_reference_type(const string&, const translation_unit&);
1472
1474lookup_reference_type(const type_base_sptr& pointed_to_type,
1475 bool lvalue_reference,
1476 const translation_unit& tu);
1477
1480
1483
1486
1488lookup_array_type(const string&, const translation_unit&);
1489
1492
1495
1497lookup_function_type(const string&,
1498 const translation_unit&);
1499
1502 const translation_unit&);
1503
1506 const translation_unit&);
1507
1510 const translation_unit&);
1511
1514
1517
1520
1523
1524type_base_sptr
1525lookup_type(const string&, const translation_unit&);
1526
1527const type_base_sptr
1528lookup_type(const type_base_sptr, const translation_unit&);
1529
1530type_base_sptr
1531lookup_type(const interned_string&, const corpus&);
1532
1533type_base_sptr
1535
1536type_base_sptr
1537lookup_type(const type_base&, const corpus&);
1538
1539type_base_sptr
1540lookup_type(const type_base_sptr&, const corpus&);
1541
1542type_base_sptr
1543lookup_type_through_scopes(const std::list<string>&,
1544 const translation_unit&);
1545
1546type_base_sptr
1547lookup_type_through_translation_units(const string&, const corpus&);
1548
1549type_base_sptr
1550lookup_type_from_translation_unit(const string& type_name,
1551 const string& tu_path,
1552 const corpus& corp);
1553
1556 const corpus&);
1557
1558type_base_sptr
1559synthesize_type_from_translation_unit(const type_base_sptr&,
1561
1565
1566const type_base_sptr
1567lookup_type_in_scope(const string&,
1568 const scope_decl_sptr&);
1569
1570const type_base_sptr
1571lookup_type_in_scope(const std::list<string>&,
1572 const scope_decl_sptr&);
1573
1574const decl_base_sptr
1575lookup_var_decl_in_scope(const string&,
1576 const scope_decl_sptr&);
1577
1578const decl_base_sptr
1579lookup_var_decl_in_scope(const std::list<string>&,
1580 const scope_decl_sptr&);
1581
1582string
1583demangle_cplus_mangled_name(const string&);
1584
1585type_base_sptr
1586type_or_void(const type_base_sptr, const environment&);
1587
1588type_base_sptr
1589canonicalize(type_base_sptr type, bool do_log= false, bool show_stats= false);
1590
1591type_base*
1592type_has_non_canonicalized_subtype(type_base_sptr t);
1593
1594bool
1595type_has_sub_type_changes(type_base_sptr t_v1,
1596 type_base_sptr t_v2);
1597
1598void
1599keep_type_alive(type_base_sptr t);
1600
1601size_t
1602hash_type(const type_base *t);
1603
1604size_t
1606
1607size_t
1609
1610bool
1612
1613bool
1614is_non_canonicalized_type(const type_base_sptr&);
1615
1616bool
1617is_unique_type(const type_base_sptr&);
1618
1619bool
1621
1622/// For a given type, return its exemplar type.
1623///
1624/// For a given type, its exemplar type is either its canonical type
1625/// or the canonical type of the definition type of a given
1626/// declaration-only type. If the neither of those two types exist,
1627/// then the exemplar type is the given type itself.
1628///
1629/// @param type the input to consider.
1630///
1631/// @return the exemplar type.
1632type_base*
1633get_exemplar_type(const type_base* type);
1634
1635bool
1637
1638bool
1639types_have_similar_structure(const type_base_sptr& first,
1640 const type_base_sptr& second,
1641 bool indirect_type = false);
1642
1643bool
1645 const type_base* second,
1646 bool indirect_type = false);
1647
1648string
1649build_internal_underlying_enum_type_name(const string &base_name,
1650 bool is_anonymous,
1651 uint64_t size);
1652
1655 const regex::regex_t_sptr& r);
1656
1659 const regex::regex_t_sptr& regex);
1660
1661bool
1663
1664bool
1666 const type_or_decl_base_sptr& d2);
1667
1668bool
1669integral_type_has_harmless_name_change(const decl_base_sptr& f,
1670 const decl_base_sptr& s);
1671
1672bool
1673integral_type_has_harmless_name_change(const type_base_sptr& f,
1674 const type_base_sptr& s);
1675} // end namespace ir
1676
1677using namespace abigail::ir;
1678
1679namespace suppr
1680{
1681class suppression_base;
1682
1683/// Convenience typedef for a shared pointer to a @ref suppression.
1684typedef shared_ptr<suppression_base> suppression_sptr;
1685
1686/// Convenience typedef for a vector of @ref suppression_sptr
1687typedef vector<suppression_sptr> suppressions_type;
1688
1689} // end namespace suppr
1690
1691namespace symtab_reader
1692{
1693
1694class symtab;
1695/// Convenience typedef for a shared pointer to a @ref symtab
1696typedef std::shared_ptr<symtab> symtab_sptr;
1697
1698} // end namespace symtab_reader
1699
1700void
1701dump(const decl_base_sptr, std::ostream&);
1702
1703void
1704dump(const decl_base_sptr);
1705
1706void
1707dump(const type_base_sptr, std::ostream&);
1708
1709void
1710dump(const type_base_sptr);
1711
1712void
1713dump(const var_decl_sptr, std::ostream&);
1714
1715void
1716dump(const var_decl_sptr);
1717
1718void
1719dump(const translation_unit&, std::ostream&);
1720
1721void
1722dump(const translation_unit&);
1723
1724void
1725dump(const translation_unit_sptr, std::ostream&);
1726
1727void
1729
1730void
1732
1733void
1735
1736void
1737dump_decl_location(const decl_base_sptr&);
1738
1739#ifndef ABG_ASSERT
1740/// This is a wrapper around the 'assert' glibc call. It allows for
1741/// its argument to have side effects, so that it keeps working when
1742/// the code of libabigail is compiled with the NDEBUG macro defined.
1743#define ABG_ASSERT(cond) do {({bool __abg_cond__ = bool(cond); assert(__abg_cond__); !!__abg_cond__;});} while (false)
1744#endif
1745
1746} // end namespace abigail
1747#endif // __ABG_IRFWD_H__
std::shared_ptr< symtab > symtab_sptr
Convenience typedef for a shared pointer to a symtab.
Definition abg-fwd.h:1696
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:2548
Abstracts a class declaration.
Definition abg-ir.h:4174
The base type of class_decl and union_decl.
Definition abg-ir.h:3977
Abstract a class template.
Definition abg-ir.h:3797
Abstraction of a group of corpora.
Definition abg-corpus.h:386
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:1585
The abstraction for a data member context relationship. This relates a data member to its parent clas...
Definition abg-ir.h:3003
Abstracts a declaration for an enum type.
Definition abg-ir.h:2785
This is an abstraction of the set of resources necessary to manage several aspects of the internal re...
Definition abg-ir.h:148
Abstraction for a function declaration.
Definition abg-ir.h:3165
Abstract a function template declaration.
Definition abg-ir.h:3752
Abstraction of a function type.
Definition abg-ir.h:3420
This abstracts the global scope of a given translation unit.
Definition abg-ir.h:1982
The base class for the visitor type hierarchy used for traversing a translation unit.
Definition abg-ir.h:4811
The entry point to manage locations.
Definition abg-ir.h:449
The source location of a token.
Definition abg-ir.h:307
Abstraction of a member function context relationship. This relates a member function to its parent c...
Definition abg-ir.h:4497
Abstracts a member class template template.
Definition abg-ir.h:4702
Abstract a member function template.
Definition abg-ir.h:4647
Abstraction of the declaration of a method.
Definition abg-ir.h:3887
Abstracts the type of a class member function.
Definition abg-ir.h:3506
The abstraction of a namespace declaration.
Definition abg-ir.h:2207
Abstracts non type template parameters.
Definition abg-ir.h:3662
The abstraction of a pointer type.
Definition abg-ir.h:2350
The abstraction of a pointer-to-member type.
Definition abg-ir.h:2485
The abstraction of a qualified type.
Definition abg-ir.h:2236
Abstracts a reference type.
Definition abg-ir.h:2416
A declaration that introduces a scope.
Definition abg-ir.h:1853
A type that introduces a scope.
Definition abg-ir.h:2184
The base class of templates.
Definition abg-ir.h:3567
Base class for a template parameter. Client code should use the more specialized type_template_parame...
Definition abg-ir.h:3599
Abstracts a template template parameter.
Definition abg-ir.h:3695
This is the abstraction of the set of relevant artefacts (types, variable declarations,...
Definition abg-ir.h:695
An abstraction helper for type declarations.
Definition abg-ir.h:2003
This abstracts a composition of types based on template type parameters. The result of the compositio...
Definition abg-ir.h:3730
A basic type declaration that introduces no scope.
Definition abg-ir.h:2118
The base class of both types and declarations.
Definition abg-ir.h:1406
Abstracts a type template parameter.
Definition abg-ir.h:3628
The abstraction of a typedef declaration.
Definition abg-ir.h:2935
Abstracts a union type declaration.
Definition abg-ir.h:4422
Abstracts a variable declaration.
Definition abg-ir.h:3068
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:78
weak_ptr< diff > diff_wptr
Convenience typedef for a weak_ptr for the diff class.
Definition abg-fwd.h:81
shared_ptr< diff_context > diff_context_sptr
Convenience typedef for a shared pointer of diff_context.
Definition abg-fwd.h:70
weak_ptr< diff_context > diff_context_wptr
Convenience typedef for a weak pointer of diff_context.
Definition abg-fwd.h:73
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:330
shared_ptr< reference_type_def > reference_type_def_sptr
Convenience typedef for a shared pointer on a reference_type_def.
Definition abg-fwd.h:235
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:12958
bool is_non_canonicalized_type(const type_base *t)
Test if a given type is allowed to be non canonicalized.
Definition abg-ir.cc:28634
shared_ptr< dm_context_rel > dm_context_rel_sptr
A convenience typedef for a shared pointer to dm_context_rel.
Definition abg-fwd.h:251
bool get_member_function_is_dtor(const function_decl &f)
Test whether a member function is a destructor.
Definition abg-ir.cc:6454
const type_base * peel_qualified_type(const type_base *type)
Return the leaf underlying type of a qualified type.
Definition abg-ir.cc:7264
weak_ptr< typedef_decl > typedef_decl_wptr
Convenience typedef for a weak pointer on a typedef_decl.
Definition abg-fwd.h:170
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:12445
shared_ptr< method_type > method_type_sptr
Convenience typedef for shared pointer to method_type.
Definition abg-fwd.h:221
size_t hash_type(const type_base *t)
Hash an ABI artifact that is a type.
Definition abg-ir.cc:28585
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:12309
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:5781
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:6154
weak_ptr< var_decl > var_decl_wptr
Convenience typedef for a weak pointer on a var_decl.
Definition abg-fwd.h:259
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:12096
type_base_sptr canonicalize(type_base_sptr t, bool do_log, bool show_stats)
Compute the canonical type of a given type.
Definition abg-ir.cc:16251
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:5575
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:11554
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:10142
shared_ptr< function_decl > function_decl_sptr
Convenience typedef for a shared pointer on a function_decl.
Definition abg-fwd.h:269
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:14026
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:11536
shared_ptr< class_tdecl > class_tdecl_sptr
Convenience typedef for a shared pointer on a class_tdecl.
Definition abg-fwd.h:289
weak_ptr< function_type > function_type_wptr
Convenience typedef for a weak pointer on a function_type.
Definition abg-fwd.h:216
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:14188
ssize_t get_member_function_vtable_offset(const function_decl &f)
Get the vtable offset of a member function.
Definition abg-ir.cc:6578
vector< type_base_wptr > type_base_wptrs_type
A convenience typedef for a vector of type_base_wptr.
Definition abg-fwd.h:142
scope_decl * get_type_scope(type_base *t)
Get the scope of a given type.
Definition abg-ir.cc:8800
const scope_decl * is_scope_decl(const decl_base *d)
Test if a declaration is a scope_decl.
Definition abg-ir.cc:5445
qualified_type_def_sptr clone_qualified_type(const qualified_type_def_sptr &t)
Clone a qualifiend type.
Definition abg-ir.cc:7615
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:11787
bool is_type(const type_or_decl_base &tod)
Test whether a declaration is a type.
Definition abg-ir.cc:10807
bool is_anonymous_data_member(const decl_base &d)
Test if a decl is an anonymous data member.
Definition abg-ir.cc:5872
bool is_template_parameter(const shared_ptr< decl_base > decl)
Tests whether a decl is a template parameter.
Definition abg-ir.cc:10681
weak_ptr< type_base > type_base_wptr
Convenience typedef for a weak pointer on a type_base.
Definition abg-fwd.h:128
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:7173
bool has_scope(const decl_base &d)
Tests if a declaration has got a scope.
Definition abg-ir.cc:5399
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:13585
type_base * get_exemplar_type(const type_base *type)
For a given type, return its exemplar type.
Definition abg-ir.cc:28705
shared_ptr< non_type_tparameter > non_type_tparameter_sptr
Convenience typedef for shared pointer to non_type_template_parameter.
Definition abg-fwd.h:320
void remove_decl_from_scope(decl_base_sptr decl)
Remove a given decl from its scope.
Definition abg-ir.cc:8475
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:10207
array_type_def_sptr clone_array(const array_type_def_sptr &array)
Clone an array type.
Definition abg-ir.cc:7548
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:29211
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:11711
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:5718
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:13320
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:9684
bool is_user_defined_type(const type_base *t)
Test if a type is user-defined.
Definition abg-ir.cc:5479
weak_ptr< class_decl > class_decl_wptr
Convenience typedef for a weak pointer on a class_decl.
Definition abg-fwd.h:202
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:12335
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:10192
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:5815
shared_ptr< global_scope > global_scope_sptr
Convenience typedef for shared pointer on global_scope.
Definition abg-fwd.h:299
bool is_class_type(const type_or_decl_base &t)
Test whether a type is a class.
Definition abg-ir.cc:11165
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:15271
void set_member_function_virtuality(function_decl &fn, bool is_virtual, ssize_t voffset)
Set the virtual-ness of a member fcuntion.
Definition abg-ir.cc:6715
shared_ptr< array_type_def > array_type_def_sptr
Convenience typedef for a shared pointer on a array_type_def.
Definition abg-fwd.h:244
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:13610
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:11349
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:9286
bool is_anonymous_type(const type_base *t)
Test whether a declaration is a type.
Definition abg-ir.cc:10858
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:14213
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:7333
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:6058
type_decl * is_integral_type(const type_or_decl_base *t)
Test if a type is an integral type.
Definition abg-ir.cc:10967
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:6114
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:13889
void set_member_function_is_dtor(function_decl &f, bool d)
Set the destructor-ness property of a member function.
Definition abg-ir.cc:6482
const type_base_sptr peel_array_type(const type_base_sptr &type)
Return the leaf element type of an array.
Definition abg-ir.cc:7222
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:12776
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:28849
shared_ptr< template_parameter > template_parameter_sptr
Convenience typedef for shared pointer to template parameter.
Definition abg-fwd.h:314
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:11396
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:10024
type_base * look_through_decl_only_type(type_base *t)
If a type is is decl-only, then get its definition. Otherwise, just return the initial type.
Definition abg-ir.cc:12027
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:5742
shared_ptr< class_decl > class_decl_sptr
Convenience typedef for a shared pointer on a class_decl.
Definition abg-fwd.h:193
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:7409
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:6538
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:6915
namespace_decl_sptr is_namespace(const decl_base_sptr &d)
Tests if a declaration is a namespace declaration.
Definition abg-ir.cc:12078
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:10909
decl_base * is_decl_slow(const type_or_decl_base *t)
Test if an ABI artifact is a declaration.
Definition abg-ir.cc:10787
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:11967
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:11858
vector< class_decl_sptr > classes_type
Convenience typedef for a vector of class_decl_sptr.
Definition abg-fwd.h:196
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:8686
const class_decl * is_compatible_with_class_type(const type_base *t)
Test if a type is a class. This function looks through typedefs.
Definition abg-ir.cc:11118
typedef_decl_sptr is_typedef(const type_or_decl_base_sptr t)
Test whether a type is a typedef.
Definition abg-ir.cc:11011
shared_ptr< template_tparameter > template_tparameter_sptr
Convenience typedef for a shared_ptr to template_tparameter.
Definition abg-fwd.h:327
uint64_t get_var_size_in_bits(const var_decl_sptr &v)
Get the size of a given variable.
Definition abg-ir.cc:6316
weak_ptr< corpus > corpus_wptr
Convenience typedef for a weak pointer to a corpus.
Definition abg-fwd.h:131
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:14056
string get_debug_representation(const type_or_decl_base *artifact)
Get the textual representation of a type for debugging purposes.
Definition abg-ir.cc:9833
shared_ptr< function_type > function_type_sptr
Convenience typedef for a shared pointer on a function_type.
Definition abg-fwd.h:210
shared_ptr< typedef_decl > typedef_decl_sptr
Convenience typedef for a shared pointer on a typedef_decl.
Definition abg-fwd.h:167
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:15354
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:7117
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:12485
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:13560
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:12156
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:11614
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:7511
vector< function_type_sptr > function_types_type
Convenience typedef fo a vector of function_type_sptr.
Definition abg-fwd.h:213
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:11651
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:13813
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:6567
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:8494
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:11100
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:148
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:28797
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:10650
const global_scope * get_global_scope(const decl_base &decl)
return the global scope as seen by a given declaration.
Definition abg-ir.cc:8543
shared_ptr< var_decl > var_decl_sptr
Convenience typedef for a shared pointer on a var_decl.
Definition abg-fwd.h:256
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:239
const location & get_natural_or_artificial_location(const decl_base *decl)
Get the non-artificial (natural) location of a decl.
Definition abg-ir.cc:10052
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:28498
bool is_template_decl(const decl_base_sptr &decl)
Tests whether a decl is a template.
Definition abg-ir.cc:12238
shared_ptr< scope_decl > scope_decl_sptr
Convenience typedef for a shared pointer on a scope_decl.
Definition abg-fwd.h:264
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:120
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:12714
shared_ptr< translation_unit > translation_unit_sptr
Convenience typedef for a shared pointer on a translation_unit type.
Definition abg-fwd.h:136
shared_ptr< environment > environment_sptr
Convenience typedef for a shared pointer to an environment.
Definition abg-fwd.h:113
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:5990
bool integral_type_has_harmless_name_change(const type_base_sptr &f, const type_base_sptr &s)
Test if a diff node carries a change whereby two integral types have different names in a harmless wa...
Definition abg-ir.cc:29776
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:11750
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:12975
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:28435
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:157
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:12668
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:12891
bool get_data_member_is_laid_out(const var_decl &m)
Test whether a data member is laid out.
Definition abg-ir.cc:6344
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:12522
const enum_type_decl * is_compatible_with_enum_type(const type_base *t)
Test if a type is an enum. This function looks through typedefs.
Definition abg-ir.cc:11051
bool get_member_function_is_const(const function_decl &f)
Test whether a member function is const.
Definition abg-ir.cc:6510
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:9041
shared_ptr< pointer_type_def > pointer_type_def_sptr
Convenience typedef for a shared pointer on a pointer_type_def.
Definition abg-fwd.h:226
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:139
bool is_const_qualified_type(const qualified_type_def_sptr &t)
Test if a given qualified type is const.
Definition abg-ir.cc:7301
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:14518
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:6229
uint64_t get_absolute_data_member_offset(const var_decl &m)
Get the absolute offset of a data member.
Definition abg-ir.cc:6273
shared_ptr< ir_traversable_base > ir_traversable_base_sptr
Convenience typedef for a shared pointer to ir_traversable_base.
Definition abg-fwd.h:109
bool is_member_function(const function_decl &f)
Test whether a function_decl is a member function.
Definition abg-ir.cc:6368
var_decl * is_var_decl(const type_or_decl_base *tod)
Tests if a declaration is a variable declaration.
Definition abg-ir.cc:12059
decl_base * is_decl(const type_or_decl_base *d)
Test if an ABI artifact is a declaration.
Definition abg-ir.cc:10747
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:28473
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:12820
bool is_member_type(const type_base_sptr &t)
Tests if a type is a class member.
Definition abg-ir.cc:5464
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:9508
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:8450
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:29165
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:10894
shared_ptr< enum_type_decl > enum_type_decl_sptr
Convenience typedef for shared pointer to a enum_type_decl.
Definition abg-fwd.h:175
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:6167
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:6780
uint64_t get_data_member_offset(const var_decl &m)
Get the offset of a data member.
Definition abg-ir.cc:6184
vector< class_or_union_sptr > classes_or_unions_type
Convenience typedef for a vector of class_or_union_sptr.
Definition abg-fwd.h:199
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:10607
bool get_member_function_is_virtual(const function_decl &f)
Test if a given member function is virtual.
Definition abg-ir.cc:6641
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:11479
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:9805
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:6030
location get_location(const type_base_sptr &type)
Get the location of the declaration of a given type.
Definition abg-ir.cc:8766
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:11519
translation_unit * get_translation_unit(const type_or_decl_base &t)
Return the translation unit a declaration belongs to.
Definition abg-ir.cc:10503
weak_ptr< decl_base > decl_base_wptr
Convenience typedef for a weak pointer to a decl_base.
Definition abg-fwd.h:181
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:11276
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:9118
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:12110
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:11918
bool is_union_type(const type_or_decl_base &t)
Test if a type is a union_decl.
Definition abg-ir.cc:11445
const location & get_artificial_or_natural_location(const decl_base *decl)
Get the artificial location of a decl.
Definition abg-ir.cc:10071
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:12590
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:7063
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:13844
shared_ptr< template_decl > template_decl_sptr
Convenience typedef for a shared pointer to template_decl.
Definition abg-fwd.h:306
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:12194
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:12840
bool is_global_scope(const scope_decl &scope)
Tests whether if a given scope is the global scope.
Definition abg-ir.cc:10552
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:6330
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:11571
bool is_data_member(const var_decl &v)
Test if a var_decl is a data member.
Definition abg-ir.cc:5613
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:29190
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:13793
const decl_base * get_type_declaration(const type_base *t)
Get the declaration for a given type.
Definition abg-ir.cc:10229
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:11206
shared_ptr< type_composition > type_composition_sptr
Convenience typedef for shared pointer to type_composition.
Definition abg-fwd.h:343
void set_member_is_static(decl_base &d, bool s)
Sets the static-ness property of a class member.
Definition abg-ir.cc:26893
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:12123
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:9208
weak_ptr< template_decl > template_decl_wptr
Convenience typedef for a weak pointer to template_decl.
Definition abg-fwd.h:309
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:279
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:9180
shared_ptr< type_decl > type_decl_sptr
Convenience typedef for a shared pointer on a type_decl.
Definition abg-fwd.h:161
typedef_decl_sptr clone_typedef(const typedef_decl_sptr &t)
Clone a typedef type.
Definition abg-ir.cc:7590
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:13681
bool classes_have_same_layout(const type_base_sptr &f, const type_base_sptr &s)
Test if two classes have the same layout.
Definition abg-ir.cc:10262
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:13252
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:7038
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:10091
shared_ptr< namespace_decl > namespace_decl_sptr
Convenience typedef for a shared pointer on namespace_decl.
Definition abg-fwd.h:284
string demangle_cplus_mangled_name(const string &mangled_name)
Demangle a C++ mangled name and return the resulting string.
Definition abg-ir.cc:15428
bool is_unique_type(const type_base_sptr &t)
Test if a type is unique in the entire environment.
Definition abg-ir.cc:28670
bool types_are_compatible(const type_base_sptr type1, const type_base_sptr type2)
Test if two types are equal modulo a typedef or CV qualifiers.
Definition abg-ir.cc:10397
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:8835
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:8587
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:7668
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:9019
bool decl_name_changed(const type_or_decl_base *a1, const type_or_decl_base *a2)
Test if two decls have different names.
Definition abg-ir.cc:29735
bool is_at_template_scope(const shared_ptr< decl_base > decl)
Tests whether a given decl is at template scope.
Definition abg-ir.cc:10672
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:14151
function_decl * is_function_decl(const type_or_decl_base *d)
Test whether a declaration is a function_decl.
Definition abg-ir.cc:10695
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:28457
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:11888
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:11838
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:12628
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:11591
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:12555
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:11417
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:8732
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:11948
shared_ptr< function_tdecl > function_tdecl_sptr
Convenience typedef for a shared pointer on a function_tdecl.
Definition abg-fwd.h:294
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:7358
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:15458
bool is_at_global_scope(const decl_base &decl)
Tests whether a given declaration is at global scope.
Definition abg-ir.cc:10580
vector< enum_type_decl_sptr > enums_type
Convenience typedef for a vector of enum_type_decl_sptr.
Definition abg-fwd.h:178
type_decl * is_real_type(const type_or_decl_base *t)
Test if a type is a real type.
Definition abg-ir.cc:10927
bool is_member_decl(const decl_base_sptr d)
Tests if a declaration is a class member.
Definition abg-ir.cc:5417
bool get_member_function_is_ctor(const function_decl &f)
Test whether a member function is a constructor.
Definition abg-ir.cc:6395
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:6425
std::shared_ptr< regex_t > regex_t_sptr
A convenience typedef for a shared pointer of regex_t.
Definition abg-fwd.h:87
vector< suppression_sptr > suppressions_type
Convenience typedef for a vector of suppression_sptr.
Definition abg-fwd.h:1687
shared_ptr< suppression_base > suppression_sptr
Convenience typedef for a shared pointer to a suppression.
Definition abg-fwd.h:1684
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.
void dump_decl_location(const decl_base &d, ostream &o)
Serialize the source location of a decl to an output stream for debugging purposes.
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:470