• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2 // -*- Mode: C++ -*-
3 //
4 // Copyright (C) 2013-2023 Red Hat, Inc.
5 
6 /// @file
7 
8 #ifndef __ABG_IRFWD_H__
9 #define __ABG_IRFWD_H__
10 
11 #include <stdint.h>
12 #include <cstddef>
13 #include <cstdlib>
14 #include <regex.h>
15 #include <list>
16 #include <memory>
17 #include <ostream>
18 #include <string>
19 #include <typeinfo>
20 #include <unordered_map>
21 #include <unordered_set>
22 #include <utility> // for std::rel_ops, at least.
23 #include <vector>
24 #include "abg-interned-str.h"
25 #include "abg-hash.h"
26 
27 /// Toplevel namespace for libabigail.
28 namespace abigail
29 {
30 /**
31    @mainpage libabigail
32 
33    This is the API documentation of the Application Binary
34    Interface Generic Analysis and Instrumentation Library, aka,
35    <em>libabigail</em>.
36 
37    Check out <a href="http://sourceware.org/libabigail"> the project
38    homepage</a>!
39 
40    The current libabigail source code can be browsed at
41    http://sourceware.org/git/gitweb.cgi?p=libabigail.git
42 
43    It can be checked out with:
44        <em>git clone git://sourceware.org/git/libabigail.git</em>
45 
46    The mailing list to send messages and patches to is
47    libabigail@sourceware.org.
48 
49    You can hang out with libabigail developers and users on irc at
50    irc://irc.oftc.net\#libabigail.
51 */
52 
53 // Inject some types.
54 using std::shared_ptr;
55 using std::weak_ptr;
56 using std::unordered_map;
57 using std::string;
58 using std::vector;
59 using std::unordered_set;
60 
61 typedef unordered_set<string> string_set_type;
62 
63 // Pull in relational operators.
64 using namespace std::rel_ops;
65 
66 namespace comparison
67 {
68 class diff_context;
69 
70 /// Convenience typedef for a shared pointer of @ref diff_context.
71 typedef shared_ptr<diff_context> diff_context_sptr;
72 
73 /// Convenience typedef for a weak pointer of @ref diff_context.
74 typedef weak_ptr<diff_context> diff_context_wptr;
75 
76 class diff;
77 
78 /// Convenience typedef for a shared_ptr for the @ref diff class
79 typedef shared_ptr<diff> diff_sptr;
80 
81 /// Convenience typedef for a weak_ptr for the @ref diff class
82 typedef weak_ptr<diff> diff_wptr;
83 }
84 
85 namespace regex
86 {
87 /// A convenience typedef for a shared pointer of regex_t.
88 typedef std::shared_ptr<regex_t> regex_t_sptr;
89 }// end namespace regex
90 
91 namespace ir
92 {
93 
94 // Forward declarations for corpus.
95 
96 class corpus;
97 typedef shared_ptr<corpus> corpus_sptr;
98 
99 class corpus_group;
100 typedef shared_ptr<corpus_group> corpus_group_sptr;
101 
102 // Forward declarations for ir.
103 
104 class  ir_node_visitor;
105 
106 struct ir_traversable_base;
107 
108 /// Convenience typedef for a shared pointer to @ref
109 /// ir_traversable_base.
110 typedef shared_ptr<ir_traversable_base> ir_traversable_base_sptr;
111 
112 class environment;
113 /// Convenience typedef for a shared pointer to an @ref environment
114 typedef shared_ptr<environment> environment_sptr;
115 
116 class location;
117 class location_manager;
118 
119 class type_or_decl_base;
120 /// A convenience typedef for a shared_ptr to @ref type_or_decl_base.
121 typedef shared_ptr<type_or_decl_base> type_or_decl_base_sptr;
122 
123 class type_base;
124 
125 // Convenience typedef for a shared pointer on a @ref type_base
126 typedef shared_ptr<type_base> type_base_sptr;
127 
128 /// Convenience typedef for a weak pointer on a @ref type_base
129 typedef weak_ptr<type_base> type_base_wptr;
130 
131 /// Convenience typedef for a weak pointer to a @ref corpus.
132 typedef weak_ptr<corpus> corpus_wptr;
133 
134 class translation_unit;
135 /// Convenience typedef for a shared pointer on a @ref
136 /// translation_unit type.
137 typedef shared_ptr<translation_unit> translation_unit_sptr;
138 /// Convenience typedef for a map that associates a string to a
139 /// translation unit.
140 typedef unordered_map<string, translation_unit_sptr> string_tu_map_type;
141 
142 /// A convenience typedef for a vector of type_base_wptr.
143 typedef vector<type_base_wptr> type_base_wptrs_type;
144 
145 /// A convenience typedef for a map which key is an interned_string
146 /// and which value is a vector of type_base_wptr.
147 typedef unordered_map<interned_string,
148 		      type_base_wptrs_type,
149 		      hash_interned_string> istring_type_base_wptrs_map_type;
150 
151 class decl_base;
152 
153 // Convenience typedef for a smart pointer on @ref decl_base.
154 typedef shared_ptr<decl_base> decl_base_sptr;
155 
156 class type_decl;
157 /// Convenience typedef for a shared pointer on a @ref type_decl.
158 typedef shared_ptr<type_decl> type_decl_sptr;
159 
160 
161 class typedef_decl;
162 
163 /// Convenience typedef for a shared pointer on a @ref typedef_decl.
164 typedef shared_ptr<typedef_decl> typedef_decl_sptr;
165 
166 /// Convenience typedef for a weak pointer on a @ref typedef_decl.
167 typedef weak_ptr<typedef_decl> typedef_decl_wptr;
168 
169 class enum_type_decl;
170 
171 /// Convenience typedef for shared pointer to a @ref enum_type_decl.
172 typedef shared_ptr<enum_type_decl> enum_type_decl_sptr;
173 
174 /// Convenience typedef for a vector of @ref enum_type_decl_sptr
175 typedef vector<enum_type_decl_sptr> enums_type;
176 
177 /// Convenience typedef for a weak pointer to a @ref decl_base.
178 typedef weak_ptr<decl_base> decl_base_wptr;
179 
180 class class_or_union;
181 
182 typedef shared_ptr<class_or_union> class_or_union_sptr;
183 typedef weak_ptr<class_or_union> class_or_union_wptr;
184 
185 class scope_type_decl;
186 
187 class class_decl;
188 
189 /// Convenience typedef for a shared pointer on a @ref class_decl
190 typedef shared_ptr<class_decl> class_decl_sptr;
191 
192 /// Convenience typedef for a vector of @ref class_decl_sptr
193 typedef vector<class_decl_sptr> classes_type;
194 
195 /// Convenience typedef for a vector of @ref class_or_union_sptr
196 typedef vector<class_or_union_sptr> classes_or_unions_type;
197 
198 /// Convenience typedef for a weak pointer on a @ref class_decl.
199 typedef weak_ptr<class_decl> class_decl_wptr;
200 
201 class union_decl;
202 
203 typedef shared_ptr<union_decl> union_decl_sptr;
204 
205 class function_type;
206 /// Convenience typedef for a shared pointer on a @ref function_type
207 typedef shared_ptr<function_type> function_type_sptr;
208 
209 /// Convenience typedef fo a vector of @ref function_type_sptr
210 typedef vector<function_type_sptr> function_types_type;
211 
212 /// Convenience typedef for a weak pointer on a @ref function_type
213 typedef weak_ptr<function_type> function_type_wptr;
214 
215 class method_type;
216 
217 /// Convenience typedef for shared pointer to @ref method_type.
218 typedef shared_ptr<method_type> method_type_sptr;
219 
220 class pointer_type_def;
221 
222 /// Convenience typedef for a shared pointer on a @ref pointer_type_def
223 typedef shared_ptr<pointer_type_def> pointer_type_def_sptr;
224 
225 class qualified_type_def;
226 
227 typedef shared_ptr<qualified_type_def> qualified_type_def_sptr;
228 
229 class reference_type_def;
230 
231 /// Convenience typedef for a shared pointer on a @ref reference_type_def
232 typedef shared_ptr<reference_type_def> reference_type_def_sptr;
233 
234 class array_type_def;
235 
236 /// Convenience typedef for a shared pointer on a @ref array_type_def
237 typedef shared_ptr<array_type_def> array_type_def_sptr;
238 
239 class subrange_type;
240 
241 class dm_context_rel;
242 
243 /// A convenience typedef for a shared pointer to dm_context_rel.
244 typedef shared_ptr<dm_context_rel> dm_context_rel_sptr;
245 
246 class var_decl;
247 
248 /// Convenience typedef for a shared pointer on a @ref var_decl
249 typedef shared_ptr<var_decl> var_decl_sptr;
250 
251 /// Convenience typedef for a weak pointer on a @ref var_decl
252 typedef weak_ptr<var_decl> var_decl_wptr;
253 
254 typedef unordered_map<interned_string,
255 		      var_decl*,
256 		      hash_interned_string> istring_var_decl_ptr_map_type;
257 
258 class scope_decl;
259 
260 /// Convenience typedef for a shared pointer on a @ref scope_decl.
261 typedef shared_ptr<scope_decl> scope_decl_sptr;
262 
263 class function_decl;
264 
265 /// Convenience typedef for a shared pointer on a @ref function_decl
266 typedef shared_ptr<function_decl> function_decl_sptr;
267 
268 typedef unordered_map<interned_string,
269 		      function_decl*,
270 		      hash_interned_string> istring_function_decl_ptr_map_type;
271 
272 class method_decl;
273 
274 typedef shared_ptr<method_decl> method_decl_sptr;
275 
276 class mem_fn_context_rel;
277 
278 /// A convenience typedef for a shared pointer to @ref
279 /// mem_fn_context_rel.
280 typedef shared_ptr<mem_fn_context_rel> mem_fn_context_rel_sptr;
281 
282 class namespace_decl;
283 
284 /// Convenience typedef for a shared pointer on namespace_decl.
285 typedef shared_ptr<namespace_decl> namespace_decl_sptr;
286 
287 class class_tdecl;
288 
289 /// Convenience typedef for a shared pointer on a @ref class_tdecl
290 typedef shared_ptr<class_tdecl> class_tdecl_sptr;
291 
292 class function_tdecl;
293 
294 /// Convenience typedef for a shared pointer on a @ref function_tdecl
295 typedef shared_ptr<function_tdecl> function_tdecl_sptr;
296 
297 class global_scope;
298 
299 /// Convenience typedef for shared pointer on @ref global_scope.
300 typedef shared_ptr<global_scope> global_scope_sptr;
301 
302 class node_visitor;
303 
304 class template_decl;
305 
306 /// Convenience typedef for a shared pointer to @ref template_decl
307 typedef shared_ptr<template_decl> template_decl_sptr;
308 
309 /// Convenience typedef for a weak pointer to template_decl
310 typedef weak_ptr<template_decl> template_decl_wptr;
311 
312 class template_parameter;
313 
314 /// Convenience typedef for shared pointer to template parameter
315 typedef shared_ptr<template_parameter> template_parameter_sptr;
316 
317 class non_type_tparameter;
318 
319 /// Convenience typedef for shared pointer to @ref
320 /// non_type_template_parameter
321 typedef shared_ptr<non_type_tparameter> non_type_tparameter_sptr;
322 
323 class type_tparameter;
324 
325 class template_tparameter;
326 
327 /// Convenience typedef for a shared_ptr to @ref template_tparameter.
328 typedef shared_ptr<template_tparameter> template_tparameter_sptr;
329 
330 /// Convenience typedef for a shared pointer to @ref type_tparameter.
331 typedef shared_ptr<type_tparameter> type_tparameter_sptr;
332 
333 class type_composition;
334 
335 class member_function_template;
336 typedef shared_ptr<member_function_template> member_function_template_sptr;
337 typedef vector<member_function_template_sptr> member_function_templates;
338 
339 class member_class_template;
340 typedef shared_ptr<member_class_template> member_class_template_sptr;
341 typedef vector<member_class_template_sptr> member_class_templates;
342 
343 /// Convenience typedef for shared pointer to type_composition
344 typedef shared_ptr<type_composition> type_composition_sptr;
345 
346 decl_base_sptr
347 add_decl_to_scope(decl_base_sptr, scope_decl*);
348 
349 decl_base_sptr
350 add_decl_to_scope(decl_base_sptr, const scope_decl_sptr&);
351 
352 const global_scope*
353 get_global_scope(const decl_base&);
354 
355 const global_scope*
356 get_global_scope(const decl_base*);
357 
358 const global_scope*
359 get_global_scope(const decl_base_sptr);
360 
361 translation_unit*
362 get_translation_unit(const decl_base&);
363 
364 translation_unit*
365 get_translation_unit(const decl_base*);
366 
367 translation_unit*
368 get_translation_unit(const decl_base_sptr);
369 
370 bool
371 is_global_scope(const scope_decl&);
372 
373 const global_scope*
374 is_global_scope(const scope_decl*);
375 
376 bool
377 is_global_scope(const scope_decl_sptr);
378 
379 bool
380 is_at_global_scope(const decl_base&);
381 
382 bool
383 is_at_global_scope(const decl_base_sptr);
384 
385 bool
386 is_at_global_scope(const decl_base*);
387 
388 class_or_union*
389 is_at_class_scope(const decl_base_sptr);
390 
391 class_or_union*
392 is_at_class_scope(const decl_base*);
393 
394 class_or_union*
395 is_at_class_scope(const decl_base&);
396 
397 bool
398 is_at_template_scope(const decl_base_sptr);
399 
400 bool
401 is_template_parameter(const decl_base_sptr);
402 
403 function_decl*
404 is_function_decl(const type_or_decl_base*);
405 
406 function_decl_sptr
407 is_function_decl(const type_or_decl_base_sptr&);
408 
409 bool
410 is_function_decl(const type_or_decl_base&);
411 
412 decl_base*
413 is_decl(const type_or_decl_base*);
414 
415 decl_base_sptr
416 is_decl(const type_or_decl_base_sptr&);
417 
418 decl_base*
419 is_decl_slow(const type_or_decl_base*);
420 
421 decl_base_sptr
422 is_decl_slow(const type_or_decl_base_sptr&);
423 
424 bool
425 is_type(const type_or_decl_base&);
426 
427 type_base*
428 is_type(const type_or_decl_base*);
429 
430 type_base_sptr
431 is_type(const type_or_decl_base_sptr& tod);
432 
433 bool
434 is_anonymous_type(const type_base*);
435 
436 bool
437 is_anonymous_type(const type_base_sptr&);
438 
439 const type_decl*
440 is_type_decl(const type_or_decl_base*);
441 
442 type_decl_sptr
443 is_type_decl(const type_or_decl_base_sptr&);
444 
445 type_decl*
446 is_integral_type(const type_or_decl_base*);
447 
448 type_decl_sptr
449 is_integral_type(const type_or_decl_base_sptr&);
450 
451 typedef_decl_sptr
452 is_typedef(const type_or_decl_base_sptr);
453 
454 const typedef_decl*
455 is_typedef(const type_or_decl_base*);
456 
457 const typedef_decl*
458 is_typedef(const type_base*);
459 
460 typedef_decl*
461 is_typedef(type_base*);
462 
463 enum_type_decl_sptr
464 is_compatible_with_enum_type(const type_base_sptr&);
465 
466 enum_type_decl_sptr
467 is_compatible_with_enum_type(const decl_base_sptr&);
468 
469 enum_type_decl_sptr
470 is_enum_type(const type_or_decl_base_sptr&);
471 
472 const enum_type_decl*
473 is_enum_type(const type_or_decl_base*);
474 
475 bool
476 is_class_type(const type_or_decl_base&);
477 
478 class_decl*
479 is_class_type(const type_or_decl_base*);
480 
481 class_decl_sptr
482 is_class_type(const type_or_decl_base_sptr&);
483 
484 var_decl_sptr
485 has_flexible_array_data_member(const class_decl&);
486 
487 var_decl_sptr
488 has_flexible_array_data_member(const class_decl*);
489 
490 var_decl_sptr
491 has_flexible_array_data_member(const class_decl_sptr&);
492 
493 bool
494 is_declaration_only_class_or_union_type(const type_base *t,
495 					bool look_through_decl_only = false);
496 
497 bool
498 is_declaration_only_class_or_union_type(const type_base_sptr& t,
499 					bool look_through_decl_only = false);
500 
501 class_or_union*
502 is_class_or_union_type(const type_or_decl_base*);
503 
504 class_or_union_sptr
505 is_class_or_union_type(const type_or_decl_base_sptr&);
506 
507 bool
508 class_or_union_types_of_same_kind(const class_or_union *,
509 				  const class_or_union*);
510 
511 bool
512 class_or_union_types_of_same_kind(const class_or_union_sptr&,
513 				  const class_or_union_sptr&);
514 
515 bool
516 is_union_type(const type_or_decl_base&);
517 
518 union_decl*
519 is_union_type(const type_or_decl_base*);
520 
521 union_decl_sptr
522 is_union_type(const type_or_decl_base_sptr&);
523 
524 class_decl_sptr
525 is_compatible_with_class_type(const type_base_sptr&);
526 
527 class_decl_sptr
528 is_compatible_with_class_type(const decl_base_sptr&);
529 
530 pointer_type_def*
531 is_pointer_type(type_or_decl_base*);
532 
533 const pointer_type_def*
534 is_pointer_type(const type_or_decl_base*);
535 
536 pointer_type_def_sptr
537 is_pointer_type(const type_or_decl_base_sptr&);
538 
539 bool
540 is_typedef_ptr_or_ref_to_decl_only_class_or_union_type(const type_base* t);
541 
542 reference_type_def*
543 is_reference_type(type_or_decl_base*);
544 
545 const reference_type_def*
546 is_reference_type(const type_or_decl_base*);
547 
548 reference_type_def_sptr
549 is_reference_type(const type_or_decl_base_sptr&);
550 
551 const type_base*
552 is_void_pointer_type(const type_base*);
553 
554 const type_base_sptr
555 is_void_pointer_type(const type_base_sptr&);
556 
557 const type_base*
558 is_void_pointer_type_equivalent(const type_base*);
559 
560 const type_base*
561 is_void_pointer_type_equivalent(const type_base&);
562 
563 qualified_type_def*
564 is_qualified_type(const type_or_decl_base*);
565 
566 qualified_type_def_sptr
567 is_qualified_type(const type_or_decl_base_sptr&);
568 
569 function_type_sptr
570 is_function_type(const type_or_decl_base_sptr&);
571 
572 function_type*
573 is_function_type(type_or_decl_base*);
574 
575 const function_type*
576 is_function_type(const type_or_decl_base*);
577 
578 method_type_sptr
579 is_method_type(const type_or_decl_base_sptr&);
580 
581 const method_type*
582 is_method_type(const type_or_decl_base*);
583 
584 method_type*
585 is_method_type(type_or_decl_base*);
586 
587 class_or_union_sptr
588 look_through_decl_only_class(const class_or_union&);
589 
590 class_or_union_sptr
591 look_through_decl_only_class(class_or_union_sptr);
592 
593 class_or_union*
594 look_through_decl_only_class(class_or_union*);
595 
596 enum_type_decl_sptr
597 look_through_decl_only_enum(const enum_type_decl&);
598 
599 enum_type_decl_sptr
600 look_through_decl_only_enum(enum_type_decl_sptr);
601 
602 decl_base_sptr
603 look_through_decl_only(const decl_base&);
604 
605 decl_base*
606 look_through_decl_only(decl_base*);
607 
608 decl_base_sptr
609 look_through_decl_only(const decl_base_sptr&);
610 
611 var_decl*
612 is_var_decl(const type_or_decl_base*);
613 
614 var_decl_sptr
615 is_var_decl(const type_or_decl_base_sptr&);
616 
617 namespace_decl_sptr
618 is_namespace(const decl_base_sptr&);
619 
620 namespace_decl*
621 is_namespace(const decl_base*);
622 
623 bool
624 is_template_parm_composition_type(const decl_base_sptr);
625 
626 bool
627 is_template_decl(const decl_base_sptr);
628 
629 bool
630 is_function_template_pattern(const decl_base_sptr);
631 
632 
633 decl_base_sptr
634 insert_decl_into_scope(decl_base_sptr,
635 		       vector<decl_base_sptr >::iterator,
636 		       scope_decl*);
637 
638 decl_base_sptr
639 insert_decl_into_scope(decl_base_sptr,
640 		       vector<decl_base_sptr >::iterator,
641 		       scope_decl_sptr);
642 
643 bool
644 has_scope(const decl_base&);
645 
646 bool
647 has_scope(const decl_base_sptr);
648 
649 bool
650 is_member_decl(const decl_base_sptr);
651 
652 bool
653 is_member_decl(const decl_base*);
654 
655 bool
656 is_member_decl(const decl_base&);
657 
658 scope_decl*
659 is_scope_decl(decl_base*);
660 
661 scope_decl_sptr
662 is_scope_decl(const decl_base_sptr&);
663 
664 bool
665 is_member_type(const type_base_sptr&);
666 
667 bool
668 is_user_defined_type(const type_base*);
669 
670 bool
671 is_user_defined_type(const type_base_sptr&);
672 
673 void
674 remove_decl_from_scope(decl_base_sptr);
675 
676 bool
677 get_member_is_static(const decl_base&);
678 
679 bool
680 get_member_is_static(const decl_base*);
681 
682 bool
683 get_member_is_static(const decl_base_sptr&);
684 
685 void
686 set_member_is_static(decl_base&, bool);
687 
688 void
689 set_member_is_static(const decl_base_sptr&, bool);
690 
691 bool
692 is_data_member(const var_decl&);
693 
694 var_decl*
695 is_data_member(const type_or_decl_base*);
696 
697 bool
698 is_data_member(const var_decl*);
699 
700 var_decl_sptr
701 is_data_member(const type_or_decl_base_sptr&);
702 
703 bool
704 is_data_member(const var_decl_sptr);
705 
706 var_decl_sptr
707 is_data_member(const decl_base_sptr&);
708 
709 var_decl*
710 is_data_member(const decl_base *);
711 
712 var_decl*
713 is_data_member(const decl_base *);
714 
715 const var_decl_sptr
716 get_next_data_member(const class_or_union_sptr&, const var_decl_sptr&);
717 
718 var_decl_sptr
719 get_last_data_member(const class_or_union&);
720 
721 var_decl_sptr
722 get_last_data_member(const class_or_union*);
723 
724 var_decl_sptr
725 get_last_data_member(const class_or_union_sptr&);
726 
727 bool
728 is_anonymous_data_member(const decl_base&);
729 
730 const var_decl*
731 is_anonymous_data_member(const type_or_decl_base*);
732 
733 const var_decl*
734 is_anonymous_data_member(const decl_base*);
735 
736 var_decl_sptr
737 is_anonymous_data_member(const type_or_decl_base_sptr&);
738 
739 var_decl_sptr
740 is_anonymous_data_member(const decl_base_sptr&);
741 
742 var_decl_sptr
743 is_anonymous_data_member(const var_decl_sptr&);
744 
745 const var_decl*
746 is_anonymous_data_member(const var_decl*);
747 
748 bool
749 is_anonymous_data_member(const var_decl&);
750 
751 bool
752 is_data_member_of_anonymous_class_or_union(const var_decl&);
753 
754 bool
755 is_data_member_of_anonymous_class_or_union(const var_decl*);
756 
757 bool
758 is_data_member_of_anonymous_class_or_union(const var_decl_sptr&);
759 
760 const var_decl_sptr
761 get_first_non_anonymous_data_member(const var_decl_sptr);
762 
763 var_decl_sptr
764 find_data_member_from_anonymous_data_member(const var_decl_sptr&,
765 					    const string&);
766 
767 class_or_union*
768 anonymous_data_member_to_class_or_union(const var_decl*);
769 
770 class_or_union_sptr
771 anonymous_data_member_to_class_or_union(const var_decl_sptr&);
772 
773 class_or_union_sptr
774 anonymous_data_member_to_class_or_union(const var_decl&);
775 
776 bool
777 anonymous_data_member_exists_in_class(const var_decl& anon_dm,
778 				      const class_or_union& clazz);
779 
780 bool
781 is_anonymous_or_typedef_named(const decl_base&);
782 
783 const class_or_union_sptr
784 data_member_has_anonymous_type(const var_decl& d);
785 
786 const class_or_union_sptr
787 data_member_has_anonymous_type(const var_decl* d);
788 
789 const class_or_union_sptr
790 data_member_has_anonymous_type(const var_decl_sptr& d);
791 
792 array_type_def*
793 is_array_type(const type_or_decl_base* decl);
794 
795 array_type_def_sptr
796 is_array_type(const type_or_decl_base_sptr& decl);
797 
798 array_type_def_sptr
799 is_array_of_qualified_element(const type_base_sptr&);
800 
801 qualified_type_def_sptr
802 is_array_of_qualified_element(const array_type_def_sptr&);
803 
804 array_type_def_sptr
805 is_typedef_of_array(const type_base_sptr&);
806 
807 void
808 set_data_member_offset(var_decl_sptr, uint64_t);
809 
810 uint64_t
811 get_data_member_offset(const var_decl&);
812 
813 uint64_t
814 get_data_member_offset(const var_decl_sptr);
815 
816 uint64_t
817 get_data_member_offset(const decl_base_sptr);
818 
819 uint64_t
820 get_absolute_data_member_offset(const var_decl&);
821 
822 bool
823 get_next_data_member_offset(const class_or_union*,
824 			    const var_decl_sptr&,
825 			    uint64_t&);
826 
827 bool
828 get_next_data_member_offset(const class_or_union_sptr&,
829 			    const var_decl_sptr&,
830 			    uint64_t&);
831 
832 uint64_t
833 get_var_size_in_bits(const var_decl_sptr&);
834 
835 void
836 set_data_member_is_laid_out(var_decl_sptr, bool);
837 
838 bool
839 get_data_member_is_laid_out(const var_decl&);
840 
841 bool
842 get_data_member_is_laid_out(const var_decl_sptr);
843 
844 bool
845 is_member_function(const function_decl&);
846 
847 bool
848 is_member_function(const function_decl*);
849 
850 bool
851 is_member_function(const function_decl_sptr&);
852 
853 bool
854 get_member_function_is_ctor(const function_decl&);
855 
856 bool
857 get_member_function_is_ctor(const function_decl_sptr&);
858 
859 void
860 set_member_function_is_ctor(const function_decl&, bool);
861 
862 void
863 set_member_function_is_ctor(const function_decl_sptr&, bool);
864 
865 bool
866 get_member_function_is_dtor(const function_decl&);
867 
868 bool
869 get_member_function_is_dtor(const function_decl_sptr&);
870 
871 void
872 set_member_function_is_dtor(function_decl&, bool);
873 
874 void
875 set_member_function_is_dtor(const function_decl_sptr&, bool);
876 
877 bool
878 get_member_function_is_const(const function_decl&);
879 
880 bool
881 get_member_function_is_const(const function_decl_sptr&);
882 
883 void
884 set_member_function_is_const(function_decl&, bool);
885 
886 void
887 set_member_function_is_const(const function_decl_sptr&, bool);
888 
889 bool
890 member_function_has_vtable_offset(const function_decl&);
891 
892 ssize_t
893 get_member_function_vtable_offset(const function_decl&);
894 
895 ssize_t
896 get_member_function_vtable_offset(const function_decl_sptr&);
897 
898 void
899 set_member_function_vtable_offset(const function_decl& f,
900 				  ssize_t s);
901 
902 void
903 set_member_function_vtable_offset(const function_decl_sptr &f,
904 				  ssize_t s);
905 
906 bool
907 get_member_function_is_virtual(const function_decl&);
908 
909 bool
910 get_member_function_is_virtual(const function_decl_sptr&);
911 
912 bool
913 get_member_function_is_virtual(const function_decl*);
914 
915 void
916 set_member_function_is_virtual(function_decl&, bool);
917 
918 void
919 set_member_function_is_virtual(const function_decl_sptr&, bool);
920 
921 type_base_sptr
922 strip_typedef(const type_base_sptr);
923 
924 decl_base_sptr
925 strip_useless_const_qualification(const qualified_type_def_sptr t);
926 
927 void
928 strip_redundant_quals_from_underyling_types(const qualified_type_def_sptr&);
929 
930 type_base_sptr
931 peel_typedef_type(const type_base_sptr&);
932 
933 const type_base*
934 peel_typedef_type(const type_base*);
935 
936 type_base_sptr
937 peel_pointer_type(const type_base_sptr&);
938 
939 const type_base*
940 peel_pointer_type(const type_base*);
941 
942 type_base_sptr
943 peel_reference_type(const type_base_sptr&);
944 
945 const type_base*
946 peel_reference_type(const type_base*);
947 
948 const type_base_sptr
949 peel_array_type(const type_base_sptr&);
950 
951 const type_base*
952 peel_array_type(const type_base*);
953 
954 const type_base*
955 peel_qualified_type(const type_base*);
956 
957 const type_base_sptr
958 peel_qualified_type(const type_base_sptr&);
959 
960 type_base*
961 peel_qualified_or_typedef_type(const type_base* type);
962 
963 type_base_sptr
964 peel_qualified_or_typedef_type(const type_base_sptr &type);
965 
966 type_base_sptr
967 peel_typedef_pointer_or_reference_type(const type_base_sptr);
968 
969 type_base*
970 peel_typedef_pointer_or_reference_type(const type_base* type);
971 
972 type_base*
973 peel_typedef_pointer_or_reference_type(const type_base* type,
974 				       bool peel_qual_type);
975 
976 type_base*
977 peel_pointer_or_reference_type(const type_base *type,
978 			       bool peel_qualified_type = true);
979 
980 array_type_def_sptr
981 clone_array(const array_type_def_sptr& array);
982 
983 typedef_decl_sptr
984 clone_typedef(const typedef_decl_sptr& t);
985 
986 qualified_type_def_sptr
987 clone_qualified_type(const qualified_type_def_sptr& t);
988 
989 type_base_sptr
990 clone_array_tree(const type_base_sptr t);
991 
992 string
993 get_name(const type_or_decl_base*, bool qualified = true);
994 
995 string
996 get_name(const type_or_decl_base_sptr&,
997 	 bool qualified = true);
998 
999 location
1000 get_location(const type_base_sptr& type);
1001 
1002 location
1003 get_location(const decl_base_sptr& decl);
1004 
1005 string
1006 build_qualified_name(const scope_decl* scope, const string& name);
1007 
1008 string
1009 build_qualified_name(const scope_decl* scope,
1010 		     const type_base_sptr& type);
1011 
1012 scope_decl*
1013 get_type_scope(type_base*);
1014 
1015 scope_decl*
1016 get_type_scope(const type_base_sptr&);
1017 
1018 interned_string
1019 get_type_name(const type_base_sptr&,
1020 	      bool qualified = true,
1021 	      bool internal = false);
1022 
1023 interned_string
1024 get_type_name(const type_base*,
1025 	      bool qualified = true,
1026 	      bool internal = false);
1027 
1028 interned_string
1029 get_type_name(const type_base&,
1030 	      bool qualified = true,
1031 	      bool internal = false);
1032 
1033 interned_string
1034 get_name_of_pointer_to_type(const type_base& pointed_to_type,
1035 			    bool qualified = true,
1036 			    bool internal = false);
1037 
1038 interned_string
1039 get_name_of_reference_to_type(const type_base& pointed_to_type,
1040 			      bool lvalue_reference = false,
1041 			      bool qualified = true,
1042 			      bool internal = false);
1043 
1044 interned_string
1045 get_function_type_name(const function_type_sptr&,
1046 		       bool internal = false);
1047 
1048 interned_string
1049 get_function_type_name(const function_type*, bool internal = false);
1050 
1051 interned_string
1052 get_function_type_name(const function_type&, bool internal = false);
1053 
1054 interned_string
1055 get_function_id_or_pretty_representation(function_decl *fn);
1056 
1057 interned_string
1058 get_method_type_name(const method_type_sptr&, bool internal = false);
1059 
1060 interned_string
1061 get_method_type_name(const method_type*, bool internal = false);
1062 
1063 interned_string
1064 get_method_type_name(const method_type&, bool internal = false);
1065 
1066 string
1067 get_pretty_representation(const decl_base*, bool internal = false);
1068 
1069 string
1070 get_pretty_representation(const type_base*, bool internal = false);
1071 
1072 string
1073 get_pretty_representation(const type_or_decl_base*, bool internal = false);
1074 
1075 string
1076 get_pretty_representation(const type_or_decl_base_sptr&,
1077 			  bool internal = false);
1078 
1079 string
1080 get_pretty_representation(const decl_base_sptr&, bool internal = false);
1081 
1082 string
1083 get_pretty_representation(const type_base_sptr&, bool internal = false);
1084 
1085 string
1086 get_pretty_representation(const function_type&, bool internal = false);
1087 
1088 string
1089 get_pretty_representation(const function_type*, bool internal = false);
1090 
1091 string
1092 get_pretty_representation(const function_type_sptr&,
1093 			  bool internal = false);
1094 
1095 string
1096 get_pretty_representation(const method_type&, bool internal = false);
1097 
1098 string
1099 get_pretty_representation(const method_type*, bool internal = false);
1100 
1101 string
1102 get_pretty_representation(const method_type_sptr&,
1103 			  bool internal = false);
1104 
1105 string
1106 get_class_or_union_flat_representation(const class_or_union& cou,
1107 				       const string& indent,
1108 				       bool one_line,
1109 				       bool internal,
1110 				       bool qualified_name = true);
1111 
1112 string
1113 get_class_or_union_flat_representation(const class_or_union* cou,
1114 				       const string& indent,
1115 				       bool one_line,
1116 				       bool internal,
1117 				       bool qualified_name = true);
1118 
1119 string
1120 get_class_or_union_flat_representation(const class_or_union_sptr& cou,
1121 				       const string& indent,
1122 				       bool one_line,
1123 				       bool internal,
1124 				       bool qualified_name = true);
1125 
1126 string
1127 get_enum_flat_representation(const enum_type_decl& enum_type,
1128 			     const string& indent,
1129 			     bool one_line,
1130 			     bool internal,
1131 			     bool qualified_names);
1132 
1133 string
1134 get_enum_flat_representation(const enum_type_decl* enum_type,
1135 			     const string& indent,
1136 			     bool one_line,
1137 			     bool internal,
1138 			     bool qualified_names);
1139 
1140 string
1141 get_enum_flat_representation(const enum_type_decl_sptr& enum_type,
1142 			     const string& indent,
1143 			     bool one_line,
1144 			     bool qualified_names);
1145 
1146 string
1147 get_class_or_enum_flat_representation(const type_base& coe,
1148 				      const string& indent,
1149 				      bool one_line,
1150 				      bool internal,
1151 				      bool qualified_name);
1152 
1153 string
1154 get_debug_representation(const type_or_decl_base*);
1155 
1156 var_decl_sptr
1157 get_data_member(class_or_union *, const char*);
1158 
1159 var_decl_sptr
1160 get_data_member(type_base *clazz, const char* member_name);
1161 
1162 const location&
1163 get_natural_or_artificial_location(const decl_base*);
1164 
1165 const location&
1166 get_artificial_or_natural_location(const decl_base*);
1167 
1168 type_or_decl_base*
1169 debug(const type_or_decl_base* artifact);
1170 
1171 type_base*
1172 debug(const type_base* artifact);
1173 
1174 decl_base*
1175 debug(const decl_base* artifact);
1176 
1177 bool
1178 debug_equals(const type_or_decl_base *l, const type_or_decl_base *r);
1179 
1180 void
1181 debug_comp_stack(const environment& env);
1182 
1183 bool
1184 odr_is_relevant(const type_or_decl_base&);
1185 
1186 const decl_base*
1187 get_type_declaration(const type_base*);
1188 
1189 decl_base*
1190 get_type_declaration(type_base*);
1191 
1192 decl_base_sptr
1193 get_type_declaration(const type_base_sptr);
1194 
1195 bool
1196 types_are_compatible(const type_base_sptr,
1197 		     const type_base_sptr);
1198 
1199 bool
1200 types_are_compatible(const decl_base_sptr,
1201 		     const decl_base_sptr);
1202 
1203 const scope_decl*
1204 get_top_most_scope_under(const decl_base*,
1205 			 const scope_decl*);
1206 
1207 const scope_decl*
1208 get_top_most_scope_under(const decl_base_sptr,
1209 			 const scope_decl*);
1210 
1211 const scope_decl*
1212 get_top_most_scope_under(const decl_base_sptr,
1213 			 const scope_decl_sptr);
1214 
1215 void
1216 fqn_to_components(const std::string&,
1217 		  std::list<string>&);
1218 
1219 string
1220 components_to_type_name(const std::list<string>&);
1221 
1222 type_decl_sptr
1223 lookup_basic_type(const type_decl&, const translation_unit&);
1224 
1225 type_decl_sptr
1226 lookup_basic_type(const interned_string&, const translation_unit&);
1227 
1228 type_decl_sptr
1229 lookup_basic_type(const string&, const translation_unit&);
1230 
1231 type_decl_sptr
1232 lookup_basic_type(const type_decl&, const corpus&);
1233 
1234 type_decl_sptr
1235 lookup_basic_type(const string&, const corpus&);
1236 
1237 type_decl_sptr
1238 lookup_basic_type(const interned_string&, const corpus&);
1239 
1240 type_decl_sptr
1241 lookup_basic_type_per_location(const interned_string&, const corpus&);
1242 
1243 type_decl_sptr
1244 lookup_basic_type_per_location(const string&, const corpus&);
1245 
1246 class_decl_sptr
1247 lookup_class_type(const class_decl&, const translation_unit&);
1248 
1249 class_decl_sptr
1250 lookup_class_type(const interned_string&, const translation_unit&);
1251 
1252 class_decl_sptr
1253 lookup_class_type(const string&, const translation_unit&);
1254 
1255 class_decl_sptr
1256 lookup_class_type(const class_decl&, const corpus&);
1257 
1258 class_decl_sptr
1259 lookup_class_type(const interned_string&, const corpus&);
1260 
1261 const type_base_wptrs_type*
1262 lookup_class_types(const interned_string&, const corpus&);
1263 
1264 const type_base_wptrs_type*
1265 lookup_union_types(const interned_string&, const corpus&);
1266 
1267 bool
1268 lookup_decl_only_class_types(const interned_string&,
1269 			     const corpus&,
1270 			     type_base_wptrs_type&);
1271 
1272 const type_base_wptrs_type*
1273 lookup_class_types(const string&, const corpus&);
1274 
1275 const type_base_wptrs_type*
1276 lookup_union_types(const string&, const corpus&);
1277 
1278 class_decl_sptr
1279 lookup_class_type_per_location(const interned_string&, const corpus&);
1280 
1281 class_decl_sptr
1282 lookup_class_type_per_location(const string&, const corpus&);
1283 
1284 class_decl_sptr
1285 lookup_class_type(const string&, const corpus&);
1286 
1287 class_decl_sptr
1288 lookup_class_type_through_scopes(const std::list<string>&,
1289 				 const translation_unit&);
1290 
1291 union_decl_sptr
1292 lookup_union_type(const interned_string&, const translation_unit&);
1293 
1294 union_decl_sptr
1295 lookup_union_type(const interned_string&, const corpus&);
1296 
1297 union_decl_sptr
1298 lookup_union_type_per_location(const interned_string&, const corpus&);
1299 
1300 union_decl_sptr
1301 lookup_union_type_per_location(const string&, const corpus&);
1302 
1303 union_decl_sptr
1304 lookup_union_type(const string&, const corpus&);
1305 
1306 enum_type_decl_sptr
1307 lookup_enum_type(const enum_type_decl&, const translation_unit&);
1308 
1309 enum_type_decl_sptr
1310 lookup_enum_type(const string&, const translation_unit&);
1311 
1312 enum_type_decl_sptr
1313 lookup_enum_type(const enum_type_decl&, const corpus&);
1314 
1315 enum_type_decl_sptr
1316 lookup_enum_type(const string&, const corpus&);
1317 
1318 enum_type_decl_sptr
1319 lookup_enum_type(const interned_string&, const corpus&);
1320 
1321 const type_base_wptrs_type*
1322 lookup_enum_types(const interned_string&, const corpus&);
1323 
1324 const type_base_wptrs_type*
1325 lookup_enum_types(const string&, const corpus&);
1326 
1327 enum_type_decl_sptr
1328 lookup_enum_type_per_location(const interned_string&, const corpus&);
1329 
1330 enum_type_decl_sptr
1331 lookup_enum_type_per_location(const string&, const corpus&);
1332 
1333 typedef_decl_sptr
1334 lookup_typedef_type(const typedef_decl&, const translation_unit&);
1335 
1336 typedef_decl_sptr
1337 lookup_typedef_type(const typedef_decl&, const corpus&);
1338 
1339 typedef_decl_sptr
1340 lookup_typedef_type(const interned_string& type_name,
1341 		    const translation_unit& tu);
1342 
1343 typedef_decl_sptr
1344 lookup_typedef_type(const string& type_name, const translation_unit& tu);
1345 
1346 typedef_decl_sptr
1347 lookup_typedef_type(const interned_string&, const corpus&);
1348 
1349 typedef_decl_sptr
1350 lookup_typedef_type_per_location(const interned_string&, const corpus &);
1351 
1352 typedef_decl_sptr
1353 lookup_typedef_type_per_location(const string&, const corpus &);
1354 
1355 typedef_decl_sptr
1356 lookup_typedef_type(const string&, const corpus&);
1357 
1358 type_base_sptr
1359 lookup_class_or_typedef_type(const string&, const translation_unit&);
1360 
1361 type_base_sptr
1362 lookup_class_typedef_or_enum_type(const string&, const translation_unit&);
1363 
1364 type_base_sptr
1365 lookup_class_or_typedef_type(const string&, const corpus&);
1366 
1367 type_base_sptr
1368 lookup_class_typedef_or_enum_type(const string&, const corpus&);
1369 
1370 qualified_type_def_sptr
1371 lookup_qualified_type(const qualified_type_def&, const translation_unit&);
1372 
1373 qualified_type_def_sptr
1374 lookup_qualified_type(const string&, const translation_unit&);
1375 
1376 qualified_type_def_sptr
1377 lookup_qualified_type(const qualified_type_def&, const corpus&);
1378 
1379 qualified_type_def_sptr
1380 lookup_qualified_type(const interned_string&, const corpus&);
1381 
1382 pointer_type_def_sptr
1383 lookup_pointer_type(const pointer_type_def&, const translation_unit&);
1384 
1385 pointer_type_def_sptr
1386 lookup_pointer_type(const string&, const translation_unit&);
1387 
1388 pointer_type_def_sptr
1389 lookup_pointer_type(const type_base_sptr& pointed_to_type,
1390 		    const translation_unit& tu);
1391 
1392 pointer_type_def_sptr
1393 lookup_pointer_type(const pointer_type_def&, const corpus&);
1394 
1395 pointer_type_def_sptr
1396 lookup_pointer_type(const interned_string&, const corpus&);
1397 
1398 const reference_type_def_sptr
1399 lookup_reference_type(const reference_type_def&, const translation_unit&);
1400 
1401 const reference_type_def_sptr
1402 lookup_reference_type(const string&, const translation_unit&);
1403 
1404 const reference_type_def_sptr
1405 lookup_reference_type(const type_base_sptr& pointed_to_type,
1406 		      bool lvalue_reference,
1407 		      const translation_unit& tu);
1408 
1409 reference_type_def_sptr
1410 lookup_reference_type(const reference_type_def&, const corpus&);
1411 
1412 reference_type_def_sptr
1413 lookup_reference_type(const interned_string&, const corpus&);
1414 
1415 array_type_def_sptr
1416 lookup_array_type(const array_type_def&, const translation_unit&);
1417 
1418 array_type_def_sptr
1419 lookup_array_type(const string&, const translation_unit&);
1420 
1421 array_type_def_sptr
1422 lookup_array_type(const array_type_def&, const corpus&);
1423 
1424 array_type_def_sptr
1425 lookup_array_type(const interned_string&, const corpus&);
1426 
1427 function_type_sptr
1428 lookup_function_type(const string&,
1429 		     const translation_unit&);
1430 
1431 function_type_sptr
1432 lookup_function_type(const interned_string&,
1433 		     const translation_unit&);
1434 
1435 function_type_sptr
1436 lookup_function_type(const function_type&,
1437 		     const translation_unit&);
1438 
1439 function_type_sptr
1440 lookup_function_type(const function_type_sptr&,
1441 		     const translation_unit&);
1442 
1443 function_type_sptr
1444 lookup_function_type(const function_type&, const corpus&);
1445 
1446 function_type_sptr
1447 lookup_function_type(const function_type_sptr&, const corpus&);
1448 
1449 function_type_sptr
1450 lookup_function_type(const function_type&, const corpus&);
1451 
1452 function_type_sptr
1453 lookup_function_type(const interned_string&, const corpus&);
1454 
1455 type_base_sptr
1456 lookup_type(const string&, const translation_unit&);
1457 
1458 const type_base_sptr
1459 lookup_type(const type_base_sptr, const translation_unit&);
1460 
1461 type_base_sptr
1462 lookup_type(const interned_string&, const corpus&);
1463 
1464 type_base_sptr
1465 lookup_type_per_location(const interned_string&, const corpus&);
1466 
1467 type_base_sptr
1468 lookup_type(const type_base&, const corpus&);
1469 
1470 type_base_sptr
1471 lookup_type(const type_base_sptr&, const corpus&);
1472 
1473 type_base_sptr
1474 lookup_type_through_scopes(const std::list<string>&,
1475 			   const translation_unit&);
1476 
1477 type_base_sptr
1478 lookup_type_through_translation_units(const string&, const corpus&);
1479 
1480 type_base_sptr
1481 lookup_type_from_translation_unit(const string& type_name,
1482 				  const string& tu_path,
1483 				  const corpus& corp);
1484 
1485 function_type_sptr
1486 lookup_or_synthesize_fn_type(const function_type_sptr&,
1487 			     const corpus&);
1488 
1489 type_base_sptr
1490 synthesize_type_from_translation_unit(const type_base_sptr&,
1491 				      translation_unit&);
1492 
1493 function_type_sptr
1494 synthesize_function_type_from_translation_unit(const function_type&,
1495 					       translation_unit&);
1496 
1497 const type_base_sptr
1498 lookup_type_in_scope(const string&,
1499 		     const scope_decl_sptr&);
1500 
1501 const type_base_sptr
1502 lookup_type_in_scope(const std::list<string>&,
1503 		     const scope_decl_sptr&);
1504 
1505 const decl_base_sptr
1506 lookup_var_decl_in_scope(const string&,
1507 			 const scope_decl_sptr&);
1508 
1509 const decl_base_sptr
1510 lookup_var_decl_in_scope(const std::list<string>&,
1511 			 const scope_decl_sptr&);
1512 
1513 string
1514 demangle_cplus_mangled_name(const string&);
1515 
1516 type_base_sptr
1517 type_or_void(const type_base_sptr, const environment&);
1518 
1519 type_base_sptr
1520 canonicalize(type_base_sptr);
1521 
1522 type_base*
1523 type_has_non_canonicalized_subtype(type_base_sptr t);
1524 
1525 bool
1526 type_has_sub_type_changes(type_base_sptr t_v1,
1527 			  type_base_sptr t_v2);
1528 
1529 void
1530 keep_type_alive(type_base_sptr t);
1531 
1532 size_t
1533 hash_type(const type_base *t);
1534 
1535 size_t
1536 hash_type_or_decl(const type_or_decl_base *);
1537 
1538 size_t
1539 hash_type_or_decl(const type_or_decl_base_sptr &);
1540 
1541 bool
1542 is_non_canonicalized_type(const type_base *);
1543 
1544 bool
1545 is_non_canonicalized_type(const type_base_sptr&);
1546 
1547 bool
1548 is_unique_type(const type_base_sptr&);
1549 
1550 bool
1551 is_unique_type(const type_base*);
1552 
1553 /// For a given type, return its exemplar type.
1554 ///
1555 /// For a given type, its exemplar type is either its canonical type
1556 /// or the canonical type of the definition type of a given
1557 /// declaration-only type.  If the neither of those two types exist,
1558 /// then the exemplar type is the given type itself.
1559 ///
1560 /// @param type the input to consider.
1561 ///
1562 /// @return the exemplar type.
1563 type_base*
1564 get_exemplar_type(const type_base* type);
1565 
1566 bool
1567 function_decl_is_less_than(const function_decl&f, const function_decl &s);
1568 
1569 bool
1570 types_have_similar_structure(const type_base_sptr& first,
1571 			     const type_base_sptr& second,
1572 			     bool indirect_type = false);
1573 
1574 bool
1575 types_have_similar_structure(const type_base* first,
1576 			     const type_base* second,
1577 			     bool indirect_type = false);
1578 
1579 string
1580 build_internal_underlying_enum_type_name(const string &base_name,
1581 					 bool is_anonymous,
1582 					 uint64_t size);
1583 
1584 var_decl_sptr
1585 find_first_data_member_matching_regexp(const class_or_union& t,
1586 				       const regex::regex_t_sptr& r);
1587 
1588 var_decl_sptr
1589 find_last_data_member_matching_regexp(const class_or_union& t,
1590 				      const regex::regex_t_sptr& regex);
1591 } // end namespace ir
1592 
1593 using namespace abigail::ir;
1594 
1595 namespace suppr
1596 {
1597 class suppression_base;
1598 
1599 /// Convenience typedef for a shared pointer to a @ref suppression.
1600 typedef shared_ptr<suppression_base> suppression_sptr;
1601 
1602 /// Convenience typedef for a vector of @ref suppression_sptr
1603 typedef vector<suppression_sptr> suppressions_type;
1604 
1605 } // end namespace suppr
1606 
1607 namespace symtab_reader
1608 {
1609 
1610 class symtab;
1611 /// Convenience typedef for a shared pointer to a @ref symtab
1612 typedef std::shared_ptr<symtab> symtab_sptr;
1613 
1614 } // end namespace symtab_reader
1615 
1616 void
1617 dump(const decl_base_sptr, std::ostream&);
1618 
1619 void
1620 dump(const decl_base_sptr);
1621 
1622 void
1623 dump(const type_base_sptr, std::ostream&);
1624 
1625 void
1626 dump(const type_base_sptr);
1627 
1628 void
1629 dump(const var_decl_sptr, std::ostream&);
1630 
1631 void
1632 dump(const var_decl_sptr);
1633 
1634 void
1635 dump(const translation_unit&, std::ostream&);
1636 
1637 void
1638 dump(const translation_unit&);
1639 
1640 void
1641 dump(const translation_unit_sptr, std::ostream&);
1642 
1643 void
1644 dump(const translation_unit_sptr);
1645 
1646 void
1647 dump_decl_location(const decl_base&);
1648 
1649 void
1650 dump_decl_location(const decl_base*);
1651 
1652 void
1653 dump_decl_location(const decl_base_sptr&);
1654 
1655 #ifndef ABG_ASSERT
1656 /// This is a wrapper around the 'assert' glibc call.  It allows for
1657 /// its argument to have side effects, so that it keeps working when
1658 /// the code of libabigail is compiled with the NDEBUG macro defined.
1659 #define ABG_ASSERT(cond) do {({bool __abg_cond__ = bool(cond); assert(__abg_cond__); !!__abg_cond__;});} while (false)
1660 #endif
1661 
1662 } // end namespace abigail
1663 #endif // __ABG_IRFWD_H__
1664