Skip to content

Commit c79f5a6

Browse files
committed
Add testcases.
1 parent df6b80c commit c79f5a6

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -DCOUNTED_BY -O2 -Wall -Wno-int-conversion -fsanitize=array-bounds,object-size,local-bounds -fstrict-flex-arrays=3 -emit-llvm -o - %s | FileCheck --check-prefix=SANITIZE-WITH-ATTR %s
3+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -DCOUNTED_BY -O2 -Wall -Wno-int-conversion -fsanitize=array-bounds,object-size,local-bounds -fstrict-flex-arrays=3 -emit-llvm -o - %s | FileCheck --check-prefix=NO-SANITIZE-WITH-ATTR %s
4+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -O2 -Wall -Wno-int-conversion -fsanitize=array-bounds,object-size,local-bounds -fstrict-flex-arrays=3 -emit-llvm -o - %s | FileCheck --check-prefix=SANITIZE-WITHOUT-ATTR %s
5+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -O2 -Wall -Wno-int-conversion -fsanitize=array-bounds,object-size,local-bounds -fstrict-flex-arrays=3 -emit-llvm -o - %s | FileCheck --check-prefix=NO-SANITIZE-WITHOUT-ATTR %s
6+
7+
// See https://github.com/llvm/llvm-project/pull/122198#issuecomment-2627868702
8+
9+
#if !__has_attribute(counted_by)
10+
#error "has attribute broken"
11+
#endif
12+
13+
#ifdef COUNTED_BY
14+
#define __counted_by(member) __attribute__((__counted_by__(member)))
15+
#else
16+
#define __counted_by(member)
17+
#endif
18+
19+
#define __bdos(P) __builtin_dynamic_object_size(P, 0)
20+
21+
typedef long unsigned int size_t;
22+
23+
struct test1_struct {
24+
int a;
25+
char *b;
26+
char c[] __counted_by(a);
27+
} d;
28+
29+
// SANITIZE-WITH-ATTR-LABEL: define dso_local i64 @test1(
30+
// SANITIZE-WITH-ATTR-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
31+
// SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]]
32+
// SANITIZE-WITH-ATTR-NEXT: ret i64 -1
33+
//
34+
// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i64 @test1(
35+
// NO-SANITIZE-WITH-ATTR-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
36+
// NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]]
37+
// NO-SANITIZE-WITH-ATTR-NEXT: ret i64 -1
38+
//
39+
// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i64 @test1(
40+
// SANITIZE-WITHOUT-ATTR-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
41+
// SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]]
42+
// SANITIZE-WITHOUT-ATTR-NEXT: ret i64 -1
43+
//
44+
// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i64 @test1(
45+
// NO-SANITIZE-WITHOUT-ATTR-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
46+
// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]]
47+
// NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i64 -1
48+
//
49+
size_t test1(void) {
50+
return __builtin_dynamic_object_size(d.b[4], 0);
51+
}
52+
53+
typedef struct {
54+
char __padding[0];
55+
} spinlock_t;
56+
struct {
57+
int priv_len;
58+
spinlock_t addr_list_lock;
59+
char *dev_addr;
60+
char priv[] __attribute__((__counted_by__(priv_len)));
61+
} x;
62+
63+
// SANITIZE-WITH-ATTR-LABEL: define dso_local i64 @falcon_reconfigure_xmac_core(
64+
// SANITIZE-WITH-ATTR-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] {
65+
// SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]]
66+
// SANITIZE-WITH-ATTR-NEXT: ret i64 -1
67+
//
68+
// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i64 @falcon_reconfigure_xmac_core(
69+
// NO-SANITIZE-WITH-ATTR-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] {
70+
// NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]]
71+
// NO-SANITIZE-WITH-ATTR-NEXT: ret i64 -1
72+
//
73+
// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i64 @falcon_reconfigure_xmac_core(
74+
// SANITIZE-WITHOUT-ATTR-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] {
75+
// SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]]
76+
// SANITIZE-WITHOUT-ATTR-NEXT: ret i64 -1
77+
//
78+
// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i64 @falcon_reconfigure_xmac_core(
79+
// NO-SANITIZE-WITHOUT-ATTR-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] {
80+
// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]]
81+
// NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i64 -1
82+
//
83+
size_t test2() {
84+
return __builtin_dynamic_object_size(&x.dev_addr[4], 1);
85+
}

0 commit comments

Comments
 (0)