blob: 585380162165dc539ea6ce51d47551e219d2aff1 [file] [log] [blame]
/* { dg-do run } */
/* This is a simplified version of what Emacs does internally,
when marking its stack. */
static unsigned long sum;
static void *stack_base;
/* A simple substitute for what Emacs actually does. */
static void
mark_maybe_pointer (void *p)
{
sum ^= (unsigned long) p;
}
static inline void __attribute__ ((no_sanitize_address))
mark_memory (void **start, void **end)
{
void **pp;
if (end < start)
{
void **tem = start;
start = end;
end = tem;
}
for (pp = start; pp < end; pp++)
{
/* This is the dereference that we don't want sanitized. */
void *p = *pp;
mark_maybe_pointer (p);
}
}
static void
mark_stack (void)
{
void *end;
mark_memory (stack_base, &end);
}
void
garbage_collect (void)
{
mark_stack ();
}
int
main (void)
{
void *dummy;
stack_base = &dummy;
garbage_collect ();
return 0;
}