summaryrefslogtreecommitdiff
path: root/ext/-test-/asan/asan.c
blob: 45b6253fdac8c8c57a9e5ad2af22b18d54dca466 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "ruby/ruby.h"

static VALUE
asan_enabled_p(VALUE self)
{
#if defined(__has_feature)
    /* clang uses __has_feature for determining asan */
    return __has_feature(address_sanitizer) ? Qtrue : Qfalse;
#elif defined(__SANITIZE_ADDRESS__)
    /* GCC sets __SANITIZE_ADDRESS__ for determining asan */
    return Qtrue;
#else
    return Qfalse;
#endif
}

void
Init_asan(void)
{
    VALUE m = rb_define_module("Test");
    VALUE c = rb_define_class_under(m, "ASAN", rb_cObject);
    rb_define_singleton_method(c, "enabled?", asan_enabled_p, 0);
}