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
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
472is_compatible_with_enum_type(const type_base_sptr&);
473
475is_compatible_with_enum_type(const decl_base_sptr&);
476
479
480const enum_type_decl*
482
483bool
485
488
491
494
497
500
503
506
509
510bool
512 bool look_through_decl_only = false);
513
514bool
515is_declaration_only_class_or_union_type(const type_base_sptr& t,
516 bool look_through_decl_only = false);
517
520
521class_or_union_sptr
523
524bool
526 const class_or_union*);
527
528bool
529class_or_union_types_of_same_kind(const class_or_union_sptr&,
530 const class_or_union_sptr&);
531
532bool
534
537
538union_decl_sptr
540
542is_compatible_with_class_type(const type_base_sptr&);
543
545is_compatible_with_class_type(const decl_base_sptr&);
546
547const pointer_type_def*
549 bool look_through_qualifiers=false);
550
553 bool look_through_qualifiers=false);
554
556is_pointer_to_function_type(const type_base_sptr&);
557
559is_pointer_to_array_type(const type_base_sptr&);
560
562is_pointer_to_ptr_to_mbr_type(const type_base_sptr&);
563
565is_pointer_to_npaf_type(const type_base_sptr&);
566
567bool
569
570bool
572
573bool
575
577is_reference_type(type_or_decl_base*, bool look_through_qualifiers=false);
578
580is_reference_type(const type_or_decl_base*, bool look_through_qualifiers=false);
581
584 bool look_through_qualifiers=false);
585
586const ptr_to_mbr_type*
588 bool look_through_qualifiers=false);
589
592 bool look_through_qualifiers=false);
593
594const type_base*
596
597const type_base_sptr
598is_void_pointer_type(const type_base_sptr&);
599
600const type_base*
602
603const type_base*
605
608
609qualified_type_def_sptr
611
612bool
613is_const_qualified_type(const type_base_sptr& t);
614
615bool
616is_const_qualified_type(const qualified_type_def_sptr&);
617
618type_base_sptr
619peel_const_qualified_type(const qualified_type_def_sptr&);
620
623
626
627const function_type*
629
632
633const method_type*
635
638
639class_or_union_sptr
641
642class_or_union_sptr
643look_through_decl_only_class(class_or_union_sptr);
644
647
650
653
654decl_base_sptr
656
659
660decl_base_sptr
661look_through_decl_only(const decl_base_sptr&);
662
665
666type_base_sptr
667look_through_decl_only_type(const type_base_sptr&);
668
671
674
676is_namespace(const decl_base_sptr&);
677
679is_namespace(const decl_base*);
680
681bool
682is_template_parm_composition_type(const decl_base_sptr);
683
684bool
685is_template_decl(const decl_base_sptr);
686
687bool
688is_function_template_pattern(const decl_base_sptr);
689
690
691decl_base_sptr
692insert_decl_into_scope(decl_base_sptr,
693 vector<decl_base_sptr >::iterator,
694 scope_decl*);
695
696decl_base_sptr
697insert_decl_into_scope(decl_base_sptr,
698 vector<decl_base_sptr >::iterator,
700
701bool
702has_scope(const decl_base&);
703
704bool
705has_scope(const decl_base_sptr);
706
707bool
708is_member_decl(const decl_base_sptr);
709
710bool
712
713bool
715
716const scope_decl*
718
720is_scope_decl(const decl_base_sptr&);
721
722bool
723is_member_type(const type_base_sptr&);
724
725bool
727
728bool
729is_user_defined_type(const type_base_sptr&);
730
731void
732remove_decl_from_scope(decl_base_sptr);
733
734bool
736
737bool
739
740bool
741get_member_is_static(const decl_base_sptr&);
742
743void
745
746void
747set_member_is_static(const decl_base_sptr&, bool);
748
749bool
751
754
755bool
757
760
761bool
763
765is_data_member(const decl_base_sptr&);
766
769
772
773const var_decl_sptr
774get_next_data_member(const class_or_union_sptr&, const var_decl_sptr&);
775
778
781
783get_last_data_member(const class_or_union_sptr&);
784
785bool
787
788bool
789collect_non_anonymous_data_members(const class_or_union_sptr &cou, string_decl_base_sptr_map& dms);
790
791bool
793
794const var_decl*
796
797const var_decl*
799
802
804is_anonymous_data_member(const decl_base_sptr&);
805
808
809const var_decl*
811
812bool
814
815bool
817
818bool
820
821bool
823
824const var_decl_sptr
826
829 const string&);
830
833
834class_or_union_sptr
836
837class_or_union_sptr
839
840bool
842 const class_or_union& clazz);
843
844bool
846
847const class_or_union_sptr
849
850const class_or_union_sptr
852
853const class_or_union_sptr
855
858 bool look_through_qualifiers = false);
859
862 bool look_through_qualifiers = false);
863
865is_array_of_qualified_element(const type_base_sptr&);
866
867qualified_type_def_sptr
869
871is_typedef_of_array(const type_base_sptr&);
872
873void
875
876uint64_t
878
879uint64_t
881
882uint64_t
883get_data_member_offset(const decl_base_sptr);
884
885uint64_t
887
888bool
890 const var_decl_sptr&,
891 uint64_t&);
892
893bool
894get_next_data_member_offset(const class_or_union_sptr&,
895 const var_decl_sptr&,
896 uint64_t&);
897
898uint64_t
900
901void
903
904bool
906
907bool
909
910bool
912
913bool
915
916bool
918
919bool
921
922bool
924
925void
927
928void
930
931bool
933
934bool
936
937void
939
940void
942
943bool
945
946bool
948
949void
951
952void
954
955bool
957
958ssize_t
960
961ssize_t
963
964bool
966
967bool
969
970bool
972
973void
975void
977void
979
980type_base_sptr
981strip_typedef(const type_base_sptr);
982
983decl_base_sptr
984strip_useless_const_qualification(const qualified_type_def_sptr t);
985
986void
987strip_redundant_quals_from_underyling_types(const qualified_type_def_sptr&);
988
989type_base_sptr
990peel_typedef_type(const type_base_sptr&);
991
992const type_base*
994
995type_base_sptr
996peel_pointer_type(const type_base_sptr&);
997
998const type_base*
1000
1001type_base_sptr
1002peel_reference_type(const type_base_sptr&);
1003
1004const type_base*
1006
1007const type_base_sptr
1008peel_array_type(const type_base_sptr&);
1009
1010const type_base*
1012
1013const type_base*
1015
1016const type_base_sptr
1017peel_qualified_type(const type_base_sptr&);
1018
1019type_base*
1021
1022type_base_sptr
1023peel_qualified_or_typedef_type(const type_base_sptr &type);
1024
1025type_base_sptr
1026peel_typedef_pointer_or_reference_type(const type_base_sptr);
1027
1028type_base*
1030
1031type_base*
1033 bool peel_qual_type);
1034
1035type_base*
1037 bool peel_qualified_type = true);
1038
1040clone_array(const array_type_def_sptr& array);
1041
1044
1045qualified_type_def_sptr
1046clone_qualified_type(const qualified_type_def_sptr& t);
1047
1048type_base_sptr
1049clone_array_tree(const type_base_sptr t);
1050
1051string
1052get_name(const type_or_decl_base*, bool qualified = true);
1053
1054string
1056 bool qualified = true);
1057
1059get_location(const type_base_sptr& type);
1060
1062get_location(const decl_base_sptr& decl);
1063
1064string
1065build_qualified_name(const scope_decl* scope, const string& name);
1066
1067string
1068build_qualified_name(const scope_decl* scope,
1069 const type_base_sptr& type);
1070
1073
1075get_type_scope(const type_base_sptr&);
1076
1078get_type_name(const type_base_sptr&,
1079 bool qualified = true,
1080 bool internal = false);
1081
1084 bool qualified = true,
1085 bool internal = false);
1086
1089 bool qualified = true,
1090 bool internal = false);
1091
1093get_name_of_pointer_to_type(const type_base& pointed_to_type,
1094 bool qualified = true,
1095 bool internal = false);
1096
1098get_name_of_reference_to_type(const type_base& pointed_to_type,
1099 bool lvalue_reference = false,
1100 bool qualified = true,
1101 bool internal = false);
1102
1105 bool internal = false);
1106
1108get_function_type_name(const function_type*, bool internal = false);
1109
1111get_function_type_name(const function_type&, bool internal = false);
1112
1115
1117get_method_type_name(const method_type_sptr&, bool internal = false);
1118
1120get_method_type_name(const method_type*, bool internal = false);
1121
1123get_method_type_name(const method_type&, bool internal = false);
1124
1125string
1126get_pretty_representation(const decl_base*, bool internal = false);
1127
1128string
1129get_pretty_representation(const type_base*, bool internal = false);
1130
1131string
1132get_pretty_representation(const type_or_decl_base*, bool internal = false);
1133
1134string
1136 bool internal = false);
1137
1138string
1139get_pretty_representation(const decl_base_sptr&, bool internal = false);
1140
1141string
1142get_pretty_representation(const type_base_sptr&, bool internal = false);
1143
1144string
1145get_pretty_representation(const function_type&, bool internal = false);
1146
1147string
1148get_pretty_representation(const function_type*, bool internal = false);
1149
1150string
1152 bool internal = false);
1153
1154string
1155get_pretty_representation(const method_type&, bool internal = false);
1156
1157string
1158get_pretty_representation(const method_type*, bool internal = false);
1159
1160string
1162 bool internal = false);
1163
1164string
1166 const string& indent,
1167 bool one_line,
1168 bool internal,
1169 bool qualified_name = true);
1170
1171string
1173 const string& indent,
1174 bool one_line,
1175 bool internal,
1176 bool qualified_name = true);
1177
1178string
1179get_class_or_union_flat_representation(const class_or_union_sptr& cou,
1180 const string& indent,
1181 bool one_line,
1182 bool internal,
1183 bool qualified_name = true);
1184
1185string
1187 const string& indent,
1188 bool one_line,
1189 bool internal,
1190 bool qualified_names);
1191
1192string
1194 const string& indent,
1195 bool one_line,
1196 bool internal,
1197 bool qualified_names);
1198
1199string
1201 const string& indent,
1202 bool one_line,
1203 bool qualified_names);
1204
1205string
1207 const string& indent,
1208 bool one_line,
1209 bool internal,
1210 bool qualified_name);
1211
1212string
1214
1216get_data_member(class_or_union *, const char*);
1217
1219get_data_member(type_base *clazz, const char* member_name);
1220
1221const location&
1223
1224const location&
1226
1228debug(const type_or_decl_base* artifact);
1229
1230type_base*
1231debug(const type_base* artifact);
1232
1233decl_base*
1234debug(const decl_base* artifact);
1235
1236bool
1238
1239void
1240debug_comp_stack(const environment& env);
1241
1242bool
1244
1245const decl_base*
1247
1248decl_base*
1250
1251decl_base_sptr
1252get_type_declaration(const type_base_sptr);
1253
1254bool
1255types_are_compatible(const type_base_sptr,
1256 const type_base_sptr);
1257
1258bool
1259types_are_compatible(const decl_base_sptr,
1260 const decl_base_sptr);
1261
1262const scope_decl*
1264 const scope_decl*);
1265
1266const scope_decl*
1267get_top_most_scope_under(const decl_base_sptr,
1268 const scope_decl*);
1269
1270const scope_decl*
1271get_top_most_scope_under(const decl_base_sptr,
1272 const scope_decl_sptr);
1273
1274void
1275fqn_to_components(const std::string&,
1276 std::list<string>&);
1277
1278string
1279components_to_type_name(const std::list<string>&);
1280
1283
1286
1288lookup_basic_type(const string&, const translation_unit&);
1289
1291lookup_basic_type(const type_decl&, const corpus&);
1292
1294lookup_basic_type(const string&, const corpus&);
1295
1298
1301
1303lookup_basic_type_per_location(const string&, const corpus&);
1304
1307
1310
1312lookup_class_type(const string&, const translation_unit&);
1313
1315lookup_class_type(const class_decl&, const corpus&);
1316
1319
1322
1325
1326bool
1328 const corpus&,
1330
1332lookup_class_types(const string&, const corpus&);
1333
1335lookup_union_types(const string&, const corpus&);
1336
1339
1341lookup_class_type_per_location(const string&, const corpus&);
1342
1344lookup_class_type(const string&, const corpus&);
1345
1347lookup_class_type_through_scopes(const std::list<string>&,
1348 const translation_unit&);
1349
1350union_decl_sptr
1352
1353union_decl_sptr
1355
1356union_decl_sptr
1358
1359union_decl_sptr
1360lookup_union_type_per_location(const string&, const corpus&);
1361
1362union_decl_sptr
1363lookup_union_type(const string&, const corpus&);
1364
1367
1369lookup_enum_type(const string&, const translation_unit&);
1370
1372lookup_enum_type(const enum_type_decl&, const corpus&);
1373
1375lookup_enum_type(const string&, const corpus&);
1376
1379
1382
1384lookup_enum_types(const string&, const corpus&);
1385
1388
1390lookup_enum_type_per_location(const string&, const corpus&);
1391
1394
1397
1399lookup_typedef_type(const interned_string& type_name,
1400 const translation_unit& tu);
1401
1403lookup_typedef_type(const string& type_name, const translation_unit& tu);
1404
1407
1410
1412lookup_typedef_type_per_location(const string&, const corpus &);
1413
1415lookup_typedef_type(const string&, const corpus&);
1416
1417type_base_sptr
1418lookup_class_or_typedef_type(const string&, const translation_unit&);
1419
1420type_base_sptr
1422
1423type_base_sptr
1424lookup_class_or_typedef_type(const string&, const corpus&);
1425
1426type_base_sptr
1427lookup_class_typedef_or_enum_type(const string&, const corpus&);
1428
1429qualified_type_def_sptr
1431
1432qualified_type_def_sptr
1433lookup_qualified_type(const string&, const translation_unit&);
1434
1435qualified_type_def_sptr
1437
1438qualified_type_def_sptr
1440
1443
1445lookup_pointer_type(const string&, const translation_unit&);
1446
1448lookup_pointer_type(const type_base_sptr& pointed_to_type,
1449 const translation_unit& tu);
1450
1453
1456
1459
1461lookup_reference_type(const string&, const translation_unit&);
1462
1464lookup_reference_type(const type_base_sptr& pointed_to_type,
1465 bool lvalue_reference,
1466 const translation_unit& tu);
1467
1470
1473
1476
1478lookup_array_type(const string&, const translation_unit&);
1479
1482
1485
1487lookup_function_type(const string&,
1488 const translation_unit&);
1489
1492 const translation_unit&);
1493
1496 const translation_unit&);
1497
1500 const translation_unit&);
1501
1504
1507
1510
1513
1514type_base_sptr
1515lookup_type(const string&, const translation_unit&);
1516
1517const type_base_sptr
1518lookup_type(const type_base_sptr, const translation_unit&);
1519
1520type_base_sptr
1521lookup_type(const interned_string&, const corpus&);
1522
1523type_base_sptr
1525
1526type_base_sptr
1527lookup_type(const type_base&, const corpus&);
1528
1529type_base_sptr
1530lookup_type(const type_base_sptr&, const corpus&);
1531
1532type_base_sptr
1533lookup_type_through_scopes(const std::list<string>&,
1534 const translation_unit&);
1535
1536type_base_sptr
1537lookup_type_through_translation_units(const string&, const corpus&);
1538
1539type_base_sptr
1540lookup_type_from_translation_unit(const string& type_name,
1541 const string& tu_path,
1542 const corpus& corp);
1543
1546 const corpus&);
1547
1548type_base_sptr
1549synthesize_type_from_translation_unit(const type_base_sptr&,
1551
1555
1556const type_base_sptr
1557lookup_type_in_scope(const string&,
1558 const scope_decl_sptr&);
1559
1560const type_base_sptr
1561lookup_type_in_scope(const std::list<string>&,
1562 const scope_decl_sptr&);
1563
1564const decl_base_sptr
1565lookup_var_decl_in_scope(const string&,
1566 const scope_decl_sptr&);
1567
1568const decl_base_sptr
1569lookup_var_decl_in_scope(const std::list<string>&,
1570 const scope_decl_sptr&);
1571
1572string
1573demangle_cplus_mangled_name(const string&);
1574
1575type_base_sptr
1576type_or_void(const type_base_sptr, const environment&);
1577
1578type_base_sptr
1579canonicalize(type_base_sptr type, bool do_log= false, bool show_stats= false);
1580
1581type_base*
1582type_has_non_canonicalized_subtype(type_base_sptr t);
1583
1584bool
1585type_has_sub_type_changes(type_base_sptr t_v1,
1586 type_base_sptr t_v2);
1587
1588void
1589keep_type_alive(type_base_sptr t);
1590
1591size_t
1592hash_type(const type_base *t);
1593
1594size_t
1596
1597size_t
1599
1600bool
1602
1603bool
1604is_non_canonicalized_type(const type_base_sptr&);
1605
1606bool
1607is_unique_type(const type_base_sptr&);
1608
1609bool
1611
1612/// For a given type, return its exemplar type.
1613///
1614/// For a given type, its exemplar type is either its canonical type
1615/// or the canonical type of the definition type of a given
1616/// declaration-only type. If the neither of those two types exist,
1617/// then the exemplar type is the given type itself.
1618///
1619/// @param type the input to consider.
1620///
1621/// @return the exemplar type.
1622type_base*
1623get_exemplar_type(const type_base* type);
1624
1625bool
1627
1628bool
1629types_have_similar_structure(const type_base_sptr& first,
1630 const type_base_sptr& second,
1631 bool indirect_type = false);
1632
1633bool
1635 const type_base* second,
1636 bool indirect_type = false);
1637
1638string
1640 bool is_anonymous,
1641 uint64_t size);
1642
1645 const regex::regex_t_sptr& r);
1646
1649 const regex::regex_t_sptr& regex);
1650} // end namespace ir
1651
1652using namespace abigail::ir;
1653
1654namespace suppr
1655{
1656class suppression_base;
1657
1658/// Convenience typedef for a shared pointer to a @ref suppression.
1659typedef shared_ptr<suppression_base> suppression_sptr;
1660
1661/// Convenience typedef for a vector of @ref suppression_sptr
1662typedef vector<suppression_sptr> suppressions_type;
1663
1664} // end namespace suppr
1665
1666namespace symtab_reader
1667{
1668
1669class symtab;
1670/// Convenience typedef for a shared pointer to a @ref symtab
1671typedef std::shared_ptr<symtab> symtab_sptr;
1672
1673} // end namespace symtab_reader
1674
1675void
1676dump(const decl_base_sptr, std::ostream&);
1677
1678void
1679dump(const decl_base_sptr);
1680
1681void
1682dump(const type_base_sptr, std::ostream&);
1683
1684void
1685dump(const type_base_sptr);
1686
1687void
1688dump(const var_decl_sptr, std::ostream&);
1689
1690void
1691dump(const var_decl_sptr);
1692
1693void
1694dump(const translation_unit&, std::ostream&);
1695
1696void
1697dump(const translation_unit&);
1698
1699void
1700dump(const translation_unit_sptr, std::ostream&);
1701
1702void
1704
1705void
1707
1708void
1710
1711void
1712dump_decl_location(const decl_base_sptr&);
1713
1714#ifndef ABG_ASSERT
1715/// This is a wrapper around the 'assert' glibc call. It allows for
1716/// its argument to have side effects, so that it keeps working when
1717/// the code of libabigail is compiled with the NDEBUG macro defined.
1718#define ABG_ASSERT(cond) do {({bool __abg_cond__ = bool(cond); assert(__abg_cond__); !!__abg_cond__;});} while (false)
1719#endif
1720
1721} // end namespace abigail
1722#endif // __ABG_IRFWD_H__
std::shared_ptr< symtab > symtab_sptr
Convenience typedef for a shared pointer to a symtab.
Definition: abg-fwd.h:1671
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:4127
The base type of class_decl and union_decl.
Definition: abg-ir.h:3929
Abstract a class template.
Definition: abg-ir.h:3749
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:1556
The abstraction for a data member context relationship. This relates a data member to its parent clas...
Definition: abg-ir.h:2966
Abstracts a declaration for an enum type.
Definition: abg-ir.h:2756
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:3117
Abstract a function template declaration.
Definition: abg-ir.h:3704
Abstraction of a function type.
Definition: abg-ir.h:3372
This abstracts the global scope of a given translation unit.
Definition: abg-ir.h:1953
The base class for the visitor type hierarchy used for traversing a translation unit.
Definition: abg-ir.h:4761
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:4447
Abstracts a member class template template.
Definition: abg-ir.h:4652
Abstract a member function template.
Definition: abg-ir.h:4597
Abstraction of the declaration of a method.
Definition: abg-ir.h:3839
Abstracts the type of a class member function.
Definition: abg-ir.h:3458
The abstraction of a namespace declaration.
Definition: abg-ir.h:2178
Abstracts non type template parameters.
Definition: abg-ir.h:3614
The abstraction of a pointer type.
Definition: abg-ir.h:2321
The abstraction of a pointer-to-member type.
Definition: abg-ir.h:2456
The abstraction of a qualified type.
Definition: abg-ir.h:2207
Abstracts a reference type.
Definition: abg-ir.h:2387
A declaration that introduces a scope.
Definition: abg-ir.h:1824
A type that introduces a scope.
Definition: abg-ir.h:2155
The base class of templates.
Definition: abg-ir.h:3519
Base class for a template parameter. Client code should use the more specialized type_template_parame...
Definition: abg-ir.h:3551
Abstracts a template template parameter.
Definition: abg-ir.h:3647
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:1974
This abstracts a composition of types based on template type parameters. The result of the compositio...
Definition: abg-ir.h:3682
A basic type declaration that introduces no scope.
Definition: abg-ir.h:2089
The base class of both types and declarations.
Definition: abg-ir.h:1377
Abstracts a type template parameter.
Definition: abg-ir.h:3580
The abstraction of a typedef declaration.
Definition: abg-ir.h:2898
Abstracts a union type declaration.
Definition: abg-ir.h:4372
Abstracts a variable declaration.
Definition: abg-ir.h:3020
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:12553
bool is_non_canonicalized_type(const type_base *t)
Test if a given type is allowed to be non canonicalized.
Definition: abg-ir.cc:28056
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:6278
const type_base * peel_qualified_type(const type_base *type)
Return the leaf underlying type of a qualified type.
Definition: abg-ir.cc:7088
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:12040
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:28007
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:11904
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:5605
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:5978
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:11691
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:15838
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:5399
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:11149
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:9960
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:13621
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:11131
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:13783
ssize_t get_member_function_vtable_offset(const function_decl &f)
Get the vtable offset of a member function.
Definition: abg-ir.cc:6402
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:8624
const scope_decl * is_scope_decl(const decl_base *d)
Test if a declaration is a scope_decl.
Definition: abg-ir.cc:5269
qualified_type_def_sptr clone_qualified_type(const qualified_type_def_sptr &t)
Clone a qualifiend type.
Definition: abg-ir.cc:7439
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:11382
bool is_type(const type_or_decl_base &tod)
Test whether a declaration is a type.
Definition: abg-ir.cc:10434
bool is_anonymous_data_member(const decl_base &d)
Test if a decl is an anonymous data member.
Definition: abg-ir.cc:5696
bool is_template_parameter(const shared_ptr< decl_base > decl)
Tests whether a decl is a template parameter.
Definition: abg-ir.cc:10308
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:6997
bool has_scope(const decl_base &d)
Tests if a declaration has got a scope.
Definition: abg-ir.cc:5223
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:13180
type_base * get_exemplar_type(const type_base *type)
For a given type, return its exemplar type.
Definition: abg-ir.cc:28127
shared_ptr< non_type_tparameter > non_type_tparameter_sptr
Convenience typedef for shared pointer to non_type_template_parameter.
Definition: abg-fwd.h:320
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:10728
void remove_decl_from_scope(decl_base_sptr decl)
Remove a given decl from its scope.
Definition: abg-ir.cc:8299
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:10025
array_type_def_sptr clone_array(const array_type_def_sptr &array)
Clone an array type.
Definition: abg-ir.cc:7372
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:28608
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:11306
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:5542
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:12915
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:9502
bool is_user_defined_type(const type_base *t)
Test if a type is user-defined.
Definition: abg-ir.cc:5303
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:11930
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:10010
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:5639
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:10760
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:14866
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:6539
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:13205
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:10944
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:9104
bool is_anonymous_type(const type_base *t)
Test whether a declaration is a type.
Definition: abg-ir.cc:10485
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:13808
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:7157
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:5882
type_decl * is_integral_type(const type_or_decl_base *t)
Test if a type is an integral type.
Definition: abg-ir.cc:10594
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:5938
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:13484
void set_member_function_is_dtor(function_decl &f, bool d)
Set the destructor-ness property of a member function.
Definition: abg-ir.cc:6306
const type_base_sptr peel_array_type(const type_base_sptr &type)
Return the leaf element type of an array.
Definition: abg-ir.cc:7046
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:12371
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:28271
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:10991
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:9842
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:11622
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:5566
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:7233
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:6362
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:6739
namespace_decl_sptr is_namespace(const decl_base_sptr &d)
Tests if a declaration is a namespace declaration.
Definition: abg-ir.cc:11673
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:10536
decl_base * is_decl_slow(const type_or_decl_base *t)
Test if an ABI artifact is a declaration.
Definition: abg-ir.cc:10414
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:11562
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:11453
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:8510
typedef_decl_sptr is_typedef(const type_or_decl_base_sptr t)
Test whether a type is a typedef.
Definition: abg-ir.cc:10638
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:6140
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:13651
string get_debug_representation(const type_or_decl_base *artifact)
Get the textual representation of a type for debugging purposes.
Definition: abg-ir.cc:9651
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:14949
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:6941
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:12080
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:13155
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:11751
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:11209
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:7335
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:11246
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:13408
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:6391
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:8318
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:10710
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:28219
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:10277
const global_scope * get_global_scope(const decl_base &decl)
return the global scope as seen by a given declaration.
Definition: abg-ir.cc:8367
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:9870
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:27920
bool is_template_decl(const decl_base_sptr &decl)
Tests whether a decl is a template.
Definition: abg-ir.cc:11833
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:12309
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:5814
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:11345
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:12570
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:27857
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:12263
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:12486
bool get_data_member_is_laid_out(const var_decl &m)
Test whether a data member is laid out.
Definition: abg-ir.cc:6168
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:12117
bool get_member_function_is_const(const function_decl &f)
Test whether a member function is const.
Definition: abg-ir.cc:6334
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:8859
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:7125
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:14113
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:6053
uint64_t get_absolute_data_member_offset(const var_decl &m)
Get the absolute offset of a data member.
Definition: abg-ir.cc:6097
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:6192
var_decl * is_var_decl(const type_or_decl_base *tod)
Tests if a declaration is a variable declaration.
Definition: abg-ir.cc:11654
decl_base * is_decl(const type_or_decl_base *d)
Test if an ABI artifact is a declaration.
Definition: abg-ir.cc:10374
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:27895
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:12415
bool is_member_type(const type_base_sptr &t)
Tests if a type is a class member.
Definition: abg-ir.cc:5288
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:9326
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:8274
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:28562
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:10521
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:5991
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:6604
uint64_t get_data_member_offset(const var_decl &m)
Get the offset of a data member.
Definition: abg-ir.cc:6008
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:10234
bool get_member_function_is_virtual(const function_decl &f)
Test if a given member function is virtual.
Definition: abg-ir.cc:6465
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:11074
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:9623
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:5854
location get_location(const type_base_sptr &type)
Get the location of the declaration of a given type.
Definition: abg-ir.cc:8590
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:11114
translation_unit * get_translation_unit(const type_or_decl_base &t)
Return the translation unit a declaration belongs to.
Definition: abg-ir.cc:10130
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:10871
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:8936
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:11705
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:11513
bool is_union_type(const type_or_decl_base &t)
Test if a type is a union_decl.
Definition: abg-ir.cc:11040
const location & get_artificial_or_natural_location(const decl_base *decl)
Get the artificial location of a decl.
Definition: abg-ir.cc:9889
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:12185
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:6887
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:13439
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:11789
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:12435
bool is_global_scope(const scope_decl &scope)
Tests whether if a given scope is the global scope.
Definition: abg-ir.cc:10179
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:6154
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:11166
bool is_data_member(const var_decl &v)
Test if a var_decl is a data member.
Definition: abg-ir.cc:5437
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:28587
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:13388
const decl_base * get_type_declaration(const type_base *t)
Get the declaration for a given type.
Definition: abg-ir.cc:10047
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:10801
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:26315
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:11718
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:9026
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:8998
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:7414
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:13276
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:12847
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:6862
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:9909
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:15023
bool is_unique_type(const type_base_sptr &t)
Test if a type is unique in the entire environment.
Definition: abg-ir.cc:28092
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:10081
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:8659
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:8411
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:7492
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:8837
bool is_at_template_scope(const shared_ptr< decl_base > decl)
Tests whether a given decl is at template scope.
Definition: abg-ir.cc:10299
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:13746
function_decl * is_function_decl(const type_or_decl_base *d)
Test whether a declaration is a function_decl.
Definition: abg-ir.cc:10322
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:27879
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:11483
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:11433
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:12223
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:11186
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:12150
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:11012
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:8556
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:11543
shared_ptr< function_tdecl > function_tdecl_sptr
Convenience typedef for a shared pointer on a function_tdecl.
Definition: abg-fwd.h:294
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:10677
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:7182
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:15053
bool is_at_global_scope(const decl_base &decl)
Tests whether a given declaration is at global scope.
Definition: abg-ir.cc:10207
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:10554
bool is_member_decl(const decl_base_sptr d)
Tests if a declaration is a class member.
Definition: abg-ir.cc:5241
bool get_member_function_is_ctor(const function_decl &f)
Test whether a member function is a constructor.
Definition: abg-ir.cc:6219
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:6249
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:1662
shared_ptr< suppression_base > suppression_sptr
Convenience typedef for a shared pointer to a suppression.
Definition: abg-fwd.h:1659
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:4861
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:5001
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