@@ -2445,3 +2445,39 @@ struct {
2445
2445
size_t test36 () {
2446
2446
return __builtin_dynamic_object_size (& x .dev_addr [4 ], 1 );
2447
2447
}
2448
+
2449
+ // SANITIZE-WITH-ATTR-LABEL: define dso_local range(i64 -8589934592, 8589934589) i64 @test37(
2450
+ // SANITIZE-WITH-ATTR-SAME: ptr noundef [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] {
2451
+ // SANITIZE-WITH-ATTR-NEXT: entry:
2452
+ // SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8
2453
+ // SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4
2454
+ // SANITIZE-WITH-ATTR-NEXT: [[COUNT:%.*]] = sext i32 [[COUNTED_BY_LOAD]] to i64
2455
+ // SANITIZE-WITH-ATTR-NEXT: [[FLEXIBLE_ARRAY_MEMBER_SIZE:%.*]] = shl nsw i64 [[COUNT]], 2
2456
+ // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = icmp sgt i32 [[COUNTED_BY_LOAD]], -1
2457
+ // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = select i1 [[TMP0]], i64 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], i64 0
2458
+ // SANITIZE-WITH-ATTR-NEXT: ret i64 [[TMP1]]
2459
+ //
2460
+ // NO-SANITIZE-WITH-ATTR-LABEL: define dso_local range(i64 -8589934592, 8589934589) i64 @test37(
2461
+ // NO-SANITIZE-WITH-ATTR-SAME: ptr noundef readonly captures(none) [[PTR:%.*]]) local_unnamed_addr #[[ATTR2]] {
2462
+ // NO-SANITIZE-WITH-ATTR-NEXT: entry:
2463
+ // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8
2464
+ // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4
2465
+ // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNT:%.*]] = sext i32 [[COUNTED_BY_LOAD]] to i64
2466
+ // NO-SANITIZE-WITH-ATTR-NEXT: [[FLEXIBLE_ARRAY_MEMBER_SIZE:%.*]] = shl nsw i64 [[COUNT]], 2
2467
+ // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = icmp sgt i32 [[COUNTED_BY_LOAD]], -1
2468
+ // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = select i1 [[TMP0]], i64 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], i64 0
2469
+ // NO-SANITIZE-WITH-ATTR-NEXT: ret i64 [[TMP1]]
2470
+ //
2471
+ // SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i64 @test37(
2472
+ // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] {
2473
+ // SANITIZE-WITHOUT-ATTR-NEXT: entry:
2474
+ // SANITIZE-WITHOUT-ATTR-NEXT: ret i64 -1
2475
+ //
2476
+ // NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i64 @test37(
2477
+ // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef readnone [[PTR:%.*]]) local_unnamed_addr #[[ATTR1]] {
2478
+ // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry:
2479
+ // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i64 -1
2480
+ //
2481
+ size_t test37 (struct annotated * ptr ) {
2482
+ return __builtin_dynamic_object_size ((1 , 2 , (4 , 5 , (7 , 8 , 9 , (10 , ptr -> array )))), 1 );
2483
+ }
0 commit comments