/* Ensure we don't pollute application namespace.  */
#define backtrace_alloc __asan_backtrace_alloc
#define backtrace_close __asan_backtrace_close
#define backtrace_create_state __asan_backtrace_create_state
#define backtrace_dwarf_add __asan_backtrace_dwarf_add
#define backtrace_free __asan_backtrace_free
#define backtrace_get_view __asan_backtrace_get_view
#define backtrace_initialize __asan_backtrace_initialize
#define backtrace_open __asan_backtrace_open
#define backtrace_pcinfo __asan_backtrace_pcinfo
#define backtrace_qsort __asan_backtrace_qsort
#define backtrace_release_view __asan_backtrace_release_view
#define backtrace_syminfo __asan_backtrace_syminfo
#define backtrace_uncompress_lzma __asan_backtrace_uncompress_lzma
#define backtrace_uncompress_zdebug __asan_backtrace_uncompress_zdebug
#define backtrace_vector_finish __asan_backtrace_vector_finish
#define backtrace_vector_grow __asan_backtrace_vector_grow
#define backtrace_vector_release __asan_backtrace_vector_release
#define backtrace_syminfo_to_full_callback __asan_backtrace_syminfo_to_full_callback
#define backtrace_syminfo_to_full_error_callback __asan_backtrace_syminfo_to_full_error_callback

#define cplus_demangle_builtin_types __asan_cplus_demangle_builtin_types
#define cplus_demangle_fill_ctor __asan_cplus_demangle_fill_ctor
#define cplus_demangle_fill_dtor __asan_cplus_demangle_fill_dtor
#define cplus_demangle_fill_extended_operator __asan_cplus_demangle_fill_extended_operator
#define cplus_demangle_fill_name __asan_cplus_demangle_fill_name
#define cplus_demangle_init_info __asan_cplus_demangle_init_info
#define cplus_demangle_mangled_name __asan_cplus_demangle_mangled_name
#define cplus_demangle_operators __asan_cplus_demangle_operators
#define cplus_demangle_print __asan_cplus_demangle_print
#define cplus_demangle_print_callback __asan_cplus_demangle_print_callback
#define cplus_demangle_type __asan_cplus_demangle_type
#define cplus_demangle_v3 __asan_cplus_demangle_v3
#define cplus_demangle_v3_callback __asan_cplus_demangle_v3_callback
#define is_gnu_v3_mangled_ctor __asan_is_gnu_v3_mangled_ctor
#define is_gnu_v3_mangled_dtor __asan_is_gnu_v3_mangled_dtor
#define java_demangle_v3 __asan_java_demangle_v3
#define java_demangle_v3_callback __asan_java_demangle_v3_callback

#ifndef __cplusplus

#include <string.h>

extern void *__asan_internal_memcpy (void *, const void *, size_t);
extern void *__asan_internal_memset (void *, int, size_t);
extern int __asan_internal_memcmp (const void *, const void *, size_t);
extern int __asan_internal_strcmp (const char *, const char *);
extern int __asan_internal_strncmp (const char *, const char *, size_t);
extern size_t __asan_internal_strlen (const char *);
extern size_t __asan_internal_strnlen (const char *, size_t);

#undef memcpy
#undef memset
#undef memcmp
#undef strcmp
#undef strncmp
#undef strlen
#undef strnlen

#define memcpy(x,y,z) __asan_internal_memcpy (x, y, z)
#define memset(x,y,z) __asan_internal_memset (x, y, z)
#define memcmp(x,y,z) __asan_internal_memcmp (x, y, z)
#define strcmp(x,y) __asan_internal_strcmp (x, y)
#define strncmp(x,y,z) __asan_internal_strncmp (x, y, z)
#define strlen(x) __asan_internal_strlen (x)
#ifdef HAVE_DECL_STRNLEN
#define strnlen(x,y) __asan_internal_strnlen (x, y)
#endif

#endif
