1#include <stdint.h>
2#include <stdlib.h>
3#include <string.h>
4#include "../profile_test.h"
5
6int __llvm_profile_runtime = 0;
7uint64_t __llvm_profile_get_size_for_buffer(void);
8int __llvm_profile_write_buffer(char *);
9void __llvm_profile_reset_counters(void);
10int __llvm_profile_check_compatibility(const char *, uint64_t);
11
12int g = 0;
13void foo(char c) {
14 if (c == '1')
15 g++;
16 else
17 g--;
18}
19
20extern uint64_t libEntry(char *Buffer, uint64_t MaxSize);
21
22int main(int argc, const char *argv[]) {
23 const uint64_t MaxSize = 10000;
24 static char ALIGNED(sizeof(uint64_t)) Buffer[MaxSize];
25
26 uint64_t Size = __llvm_profile_get_size_for_buffer();
27 if (Size > MaxSize)
28 return 1;
29
30 __llvm_profile_reset_counters();
31 foo(c: '0');
32
33 if (__llvm_profile_write_buffer(Buffer))
34 return 1;
35
36 /* Now check compatibility. Should return 0. */
37 if (__llvm_profile_check_compatibility(Buffer, Size))
38 return 1;
39
40 /* Clear the buffer. */
41 memset(s: Buffer, c: 0, n: MaxSize);
42
43 /* Collect profile from shared library. */
44 Size = libEntry(Buffer, MaxSize);
45
46 if (!Size)
47 return 1;
48
49 /* Shared library's profile should not match main executable's. */
50 if (!__llvm_profile_check_compatibility(Buffer, Size))
51 return 1;
52
53 return 0;
54}
55
56

source code of compiler-rt/test/profile/Inputs/instrprof-merge-match.c