/* { 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; }