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