File: sanitizercoverage_aottest.cpp

package info (click to toggle)
halide 21.0.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 55,752 kB
  • sloc: cpp: 289,334; ansic: 22,751; python: 7,486; makefile: 4,299; sh: 2,508; java: 1,549; javascript: 282; pascal: 207; xml: 127; asm: 9
file content (115 lines) | stat: -rw-r--r-- 3,620 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "HalideBuffer.h"
#include "HalideRuntime.h"
#include "sanitizercoverage.h"

#include <iostream>
#include <limits>
#include <type_traits>
#include <vector>

using namespace std;
using namespace Halide::Runtime;

bool enable_callbacks = false;

#if defined(__linux__)
// Used by -fsanitize-coverage=stack-depth to track stack depth
__attribute__((tls_model("initial-exec"))) thread_local uintptr_t __sancov_lowest_stack;
#endif

extern "C" void __sanitizer_cov_8bit_counters_init(uint8_t *Start, uint8_t *Stop) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_8bit_counters_init. Success!\n");
}

extern "C" void __sanitizer_cov_pcs_init(const uintptr_t *pcs_beg,
                                         const uintptr_t *pcs_end) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_pcs_init. Success!\n");
}

extern "C" void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_cmp1. Success!\n");
}

extern "C" void __sanitizer_cov_trace_cmp4(uint32_t Arg1, uint32_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_cmp4. Success!\n");
}

extern "C" void __sanitizer_cov_trace_cmp8(uint64_t Arg1, uint64_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_cmp8. Success!\n");
}

extern "C" void __sanitizer_cov_trace_const_cmp1(uint8_t Arg1, uint8_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_const_cmp1. Success!\n");
}

extern "C" void __sanitizer_cov_trace_const_cmp2(uint16_t Arg1, uint16_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_const_cmp2. Success!\n");
}

extern "C" void __sanitizer_cov_trace_const_cmp4(uint32_t Arg1, uint32_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_const_cmp4. Success!\n");
}

extern "C" void __sanitizer_cov_trace_const_cmp8(uint64_t Arg1, uint64_t Arg2) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_const_cmp8. Success!\n");
}

extern "C" void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t *Cases) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_switch. Success!\n");
}

extern "C" void __sanitizer_cov_trace_pc_indir(uintptr_t Callee) {
    if (!enable_callbacks) return;
    printf("Hit __sanitizer_cov_trace_pc_indir. Success!\n");
}

template<typename T>
void clear_out(T &image) {
    image.fill(-42);
}

void verify_out(const Buffer<int8_t, 3> &image) {
    image.for_each_element([&](int x, int y, int c) {
        int expected = 42 + c;
        int actual = image(x, y, c);
        if (actual != expected) {
            fprintf(stderr, "Failure @ %d %d %d: expected %d, got %d\n", x, y, c, expected, actual);
            exit(1);
        }
    });
}

//-----------------------------------------------------------------------------

auto sanitizercoverage_wrapper(struct halide_buffer_t *out) {
    enable_callbacks = true;
    auto status = sanitizercoverage(out);
    enable_callbacks = false;
    return status;
}

int main() {
    fprintf(stderr, "Entering main().\n");
    auto out = Buffer<int8_t, 3>(4, 4, 3);
    fprintf(stderr, "Clearing output buffer.\n");
    clear_out(out);
    fprintf(stderr, "Performing the transformation.\n");
    if (sanitizercoverage_wrapper(out) != 0) {
        fprintf(stderr, "Failure!\n");
        exit(1);
    }
    fprintf(stderr, "Verifying the transformation.\n");
    verify_out(out);
    // We rely on the callbacks being called and printing Success.
    return 0;
}