@@ -2445,3 +2445,39 @@ struct {
24452445size_t test36 () {
24462446 return __builtin_dynamic_object_size (& x .dev_addr [4 ], 1 );
24472447}
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