xref: /llvm-project/clang/test/CodeGen/bpf-stack-protector.c (revision 7e6a5fe1603f3f768e299de0bea2cde8bc3c31db)
1 // REQUIRES: bpf-registered-target
2 
3 // RUN: %clang -target bpf -S -emit-llvm -o - %s -fno-stack-protector 2>&1 \
4 // RUN:        | FileCheck -check-prefix=OFF -check-prefix=COMMON %s
5 
6 // RUN: %clang -target bpf -S -emit-llvm -o - %s -fstack-protector 2>&1 \
7 // RUN:        | FileCheck -check-prefix=ON -check-prefix=COMMON -check-prefix=WARNING %s
8 
9 // RUN: %clang -target bpf -S -emit-llvm -o - %s -fstack-protector-all 2>&1 \
10 // RUN:        | FileCheck -check-prefix=ALL -check-prefix=COMMON -check-prefix=WARNING %s
11 
12 // RUN: %clang -target bpf -S -emit-llvm -o - %s -fstack-protector-strong 2>&1 \
13 // RUN:        | FileCheck -check-prefix=STRONG -check-prefix=COMMON -check-prefix=WARNING %s
14 
15 typedef __SIZE_TYPE__ size_t;
16 
17 int printf(const char * _Format, ...);
18 size_t strlen(const char *s);
19 char *strcpy(char *s1, const char *s2);
20 
21 //     OFF-NOT: warning
22 //          ON: warning: ignoring '-fstack-protector'
23 //         ALL: warning: ignoring '-fstack-protector-all'
24 //      STRONG: warning: ignoring '-fstack-protector-strong'
25 // WARNING-SAME: option as it is not currently supported for target 'bpf'
26 
27 // COMMON: define {{.*}}void @test1(ptr noundef %{{[0-9a-z]+}}) #[[A:.*]] {
test1(const char * msg)28 void test1(const char *msg) {
29   char a[strlen(msg) + 1];
30   strcpy(a, msg);
31   printf("%s\n", a);
32 }
33 
34 // COMMON-NOT: attributes #[[A]] = {{.*}} ssp
35