|
32 | 32 | // CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_1500:.*]] = {{.*}}, i32 1500, i32 15 } }
|
33 | 33 | // CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_1600:.*]] = {{.*}}, i32 1600, i32 15 } }
|
34 | 34 | // CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_1700:.*]] = {{.*}}, i32 1700, i32 15 } }
|
| 35 | +// CHECK-SANITIZE-ANYRECOVER-DAG: @[[LINE_1800:.*]] = {{.*}}, i32 1800, i32 20 } } |
35 | 36 |
|
36 | 37 | #ifdef __cplusplus
|
37 | 38 | extern "C" {
|
@@ -431,6 +432,26 @@ char *void_ptr(void *base, unsigned long offset) {
|
431 | 432 | return base + offset;
|
432 | 433 | }
|
433 | 434 |
|
| 435 | +char *constant_null_add(unsigned long offset) { |
| 436 | + // CHECK: define{{.*}} ptr @constant_null_add(i64 noundef %[[OFFSET:.*]]) |
| 437 | + // CHECK-NEXT: [[ENTRY:.*]]: |
| 438 | + // CHECK-NEXT: %[[OFFSET_ADDR:.*]] = alloca i64, align 8 |
| 439 | + // CHECK-NEXT: store i64 %[[OFFSET]], ptr %[[OFFSET_ADDR]], align 8 |
| 440 | + // CHECK-NEXT: %[[OFFSET_RELOADED:.*]] = load i64, ptr %[[OFFSET_ADDR]], align 8 |
| 441 | + // CHECK-NEXT: %[[ADD_PTR:.*]] = inttoptr i64 %[[OFFSET_RELOADED]] to ptr |
| 442 | + // CHECK-SANITIZE-NEXT: %[[IS_NULL:.*]] = icmp eq i64 %[[OFFSET_RELOADED]], 0, !nosanitize |
| 443 | + // CHECK-SANITIZE-NEXT: br i1 %[[IS_NULL]], label %[[CONT:.*]], label %[[HANDLER_POINTER_OVERFLOW:[^,]+]],{{.*}} !nosanitize |
| 444 | + // CHECK-SANITIZE: [[HANDLER_POINTER_OVERFLOW]]: |
| 445 | + // CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_pointer_overflow_abort(ptr @[[LINE_1800]], i64 0, i64 %[[OFFSET_RELOADED]]) |
| 446 | + // CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_pointer_overflow(ptr @[[LINE_1800]], i64 0, i64 %[[OFFSET_RELOADED]]) |
| 447 | + // CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 19){{.*}}, !nosanitize |
| 448 | + // CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize |
| 449 | + // CHECK-SANITIZE: [[CONT]]: |
| 450 | + // CHECK-NEXT: ret ptr %[[ADD_PTR]] |
| 451 | +#line 1800 |
| 452 | + return (char *)0 + offset; |
| 453 | +} |
| 454 | + |
434 | 455 | #ifdef __cplusplus
|
435 | 456 | }
|
436 | 457 | #endif
|
0 commit comments