[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / CodeGen / no-builtin-2.c
blobf236f29779e070b8d586fba7db6ab152ac7f5042
1 // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
3 typedef typeof(sizeof(0)) size_t;
5 void bar(char *s);
6 void *memset(void *s, int c, size_t n);
7 void *memcpy(void *d, const void *s, size_t n);
8 void *memmove(void *d, const void *s, size_t n);
10 // CHECK: define{{.*}} void @foo1({{.*}}) #[[NO_NOBUILTIN:[0-9]+]]
11 // CHECK: call void @bar
12 // CHECK: call void @llvm.memset
13 // CHECK: call void @llvm.memcpy
14 // CHECK: call void @llvm.memmove
15 void foo1(char *s, char *d, size_t n) {
16 bar(s);
17 memset(s, 0, n);
18 memcpy(d, s, n);
19 memmove(d, s, n);
22 // CHECK: define{{.*}} void @foo2({{.*}}) #[[NOBUILTIN_MEMSET:[0-9]+]]
23 // CHECK: call void @bar
24 // CHECK: {{.*}}call {{.*}} @memset
25 // CHECK: call void @llvm.memcpy
26 // CHECK: call void @llvm.memmove
27 void foo2(char *s, char *d, size_t n) __attribute__((no_builtin("memset"))) {
28 bar(s);
29 memset(s, 1, n);
30 memcpy(d, s, n);
31 memmove(d, s, n);
34 // CHECK: define{{.*}} void @foo3({{.*}}) #[[NOBUILTIN_MEMSET_MEMCPY:[0-9]+]]
35 // CHECK: call void @bar
36 // CHECK: {{.*}}call {{.*}} @memset
37 // CHECK: {{.*}}call {{.*}} @memcpy
38 // CHECK: call void @llvm.memmove
39 void foo3(char *s, char *d, size_t n) __attribute__((no_builtin("memset", "memcpy"))) {
40 bar(s);
41 memset(s, 2, n);
42 memcpy(d, s, n);
43 memmove(d, s, n);
46 // CHECK: define{{.*}} void @foo4({{.*}}) #[[NOBUILTINS:[0-9]+]]
47 // CHECK: call void @bar
48 // CHECK: {{.*}}call {{.*}} @memset
49 // CHECK: {{.*}}call {{.*}} @memcpy
50 // CHECK: {{.*}}call {{.*}} @memmove
51 void foo4(char *s, char *d, size_t n) __attribute__((no_builtin)) {
52 bar(s);
53 memset(s, 2, n);
54 memcpy(d, s, n);
55 memmove(s, d, n);
58 // CHECK-NOT: attributes #[[NO_NOBUILTIN]] = {{{.*}}"no-builtin-memset"{{.*}}}
59 // CHECK-NOT: attributes #[[NO_NOBUILTIN]] = {{{.*}}"no-builtin-memcpy"{{.*}}"no-builtin-memset"{{.*}}}
60 // CHECK-NOT: attributes #[[NO_NOBUILTIN]] = {{{.*}}"no-builtins"{{.*}}}
61 // CHECK: attributes #[[NOBUILTIN_MEMSET]] = {{{.*}}"no-builtin-memset"{{.*}}}
62 // CHECK: attributes #[[NOBUILTIN_MEMSET_MEMCPY]] = {{{.*}}"no-builtin-memcpy"{{.*}}"no-builtin-memset"{{.*}}}
63 // CHECK: attributes #[[NOBUILTINS]] = {{{.*}}"no-builtins"{{.*}}}