1 extern void abort (void);
3 void __attribute__((noinline
,noreturn
))
13 typedef struct deferred_access_check
{} VEC_deferred_access_check_gc
;
15 typedef struct deferred_access
{
16 VEC_deferred_access_check_gc
* deferred_access_checks
;
17 int deferring_access_checks_kind
;
20 typedef struct VEC_deferred_access_base
{
22 deferred_access vec
[1];
23 } VEC_deferred_access_base
;
25 static __inline__ deferred_access
*
26 VEC_deferred_access_base_last (VEC_deferred_access_base
*vec_
)
28 (void)((vec_
&& vec_
->num
) ? 0 : (vec_assert_fail (), 0));
29 return &vec_
->vec
[vec_
->num
- 1];
32 static __inline__
void
33 VEC_deferred_access_base_pop (VEC_deferred_access_base
*vec_
)
35 (void)((vec_
->num
) ? 0 : (vec_assert_fail (), 0));
39 void __attribute__((noinline
))
40 perform_access_checks (VEC_deferred_access_check_gc
* p
)
45 typedef struct VEC_deferred_access_gc
{
46 VEC_deferred_access_base base
;
47 } VEC_deferred_access_gc
;
49 static VEC_deferred_access_gc
*deferred_access_stack
;
50 static unsigned deferred_access_no_check
;
52 const struct ggc_root_tab gt_pch_rs_gt_cp_semantics_h
[] = {
54 &deferred_access_no_check
58 void __attribute__((noinline
)) pop_to_parent_deferring_access_checks (void)
60 if (deferred_access_no_check
)
61 deferred_access_no_check
--;
64 VEC_deferred_access_check_gc
*checks
;
66 checks
= (VEC_deferred_access_base_last(deferred_access_stack
? &deferred_access_stack
->base
: 0))->deferred_access_checks
;
67 VEC_deferred_access_base_pop(deferred_access_stack
? &deferred_access_stack
->base
: 0);
68 ptr
= VEC_deferred_access_base_last(deferred_access_stack
? &deferred_access_stack
->base
: 0);
69 if (ptr
->deferring_access_checks_kind
== 0)
70 perform_access_checks (checks
);
76 deferred_access_stack
= __builtin_malloc (sizeof(VEC_deferred_access_gc
) + sizeof(deferred_access
) * 8);
77 deferred_access_stack
->base
.num
= 2;
78 deferred_access_stack
->base
.vec
[0].deferring_access_checks_kind
= 1;
79 pop_to_parent_deferring_access_checks ();