|
| 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