[clang] [UBSAN] add null, alignment and array-bounds checks (PR #190739)

Tony Varghese via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 9 07:04:08 PDT 2026


================
@@ -56,33 +57,35 @@ __attribute__((noinline)) void test_nested_member_plain_arr_idx(struct Container
 
 // SHARED-LABEL: define {{[^@]*}}@test_assign_plain_deref_ptr
 // SHARED: [[SRC:%.*]] = load ptr, ptr %ap.addr
-// SHARED-NOT: call void @__ubsan_handle_type_mismatch_v1_abort
-// SHARED-NOT: icmp ne ptr [[SRC]], null
+// SHARED: icmp ne ptr [[SRC]], null
+// SHARED: call void @__ubsan_handle_type_mismatch_v1_abort(
 // SHARED: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %{{.*}}, ptr align 4 [[SRC]], i64 4, i1 false)
 __attribute__((noinline)) void test_assign_plain_deref_ptr(struct Small *dest, struct Small *ap) {
   *dest = *ap;
 }
 
 // SHARED-LABEL: define {{[^@]*}}@test_init_plain_deref_ptr
 // SHARED: [[SRC:%.*]] = load ptr, ptr %ap.addr
-// SHARED-NOT: call void @__ubsan_handle_type_mismatch_v1_abort
-// SHARED-NOT: icmp ne ptr [[SRC]], null
+// SHARED: icmp ne ptr [[SRC]], null
+// SHARED: call void @__ubsan_handle_type_mismatch_v1_abort(
 // SHARED: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %{{.*}}, ptr align 4 [[SRC]], i64 4, i1 false)
 __attribute__((noinline)) void test_init_plain_deref_ptr(struct Small *ap) {
   struct Small a = *ap;
 }
 
 // SHARED-LABEL: define {{[^@]*}}@test_init_list_plain_deref_ptr
 // SHARED: [[SRC:%.*]] = load ptr, ptr %ap.addr
-// SHARED-NOT: call void @__ubsan_handle_type_mismatch_v1_abort
-// SHARED-NOT: icmp ne ptr [[SRC]], null
+// SHARED: icmp ne ptr [[SRC]], null
+// SHARED: call void @__ubsan_handle_type_mismatch_v1_abort(
 // SHARED: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %{{.*}}, ptr align 4 [[SRC]], i64 4, i1 false)
 __attribute__((noinline)) void test_init_list_plain_deref_ptr(struct Small *ap) {
   struct Small a[] = {*ap};
 }
 
+// Two ubsan calls: one for destination (c), one for source (*ap)
 // SHARED-LABEL: define {{[^@]*}}@test_nested_member_plain_deref_ptr
-// SHARED: call void @__ubsan_handle_type_mismatch_v1_abort
+// SHARED: call void @__ubsan_handle_type_mismatch_v1_abort(
+// SHARED: call void @__ubsan_handle_type_mismatch_v1_abort(
----------------
tonykuttai wrote:

Same as the above comment. Maybe add more IR lines to capture destination and source.

https://github.com/llvm/llvm-project/pull/190739


More information about the cfe-commits mailing list