llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: VASU SHARMA (vasu-the-sharma)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/175023.diff


1 Files Affected:

- (added) clang/test/CodeGen/ubsan-aggregate-null-align.c (+48) 


``````````diff
diff --git a/clang/test/CodeGen/ubsan-aggregate-null-align.c 
b/clang/test/CodeGen/ubsan-aggregate-null-align.c
new file mode 100644
index 0000000000000..7ca9d32c3305b
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-aggregate-null-align.c
@@ -0,0 +1,48 @@
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm %s -o - \
+// RUN:    -fsanitize=null,alignment | FileCheck %s 
--check-prefix=CHECK-SANITIZE
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm %s -o - \
+// RUN:    | FileCheck %s --check-prefix=CHECK-NO-SANITIZE
+
+struct Small { int x; };
+struct Container { struct Small inner; };
+
+// CHECK-SANITIZE-LABEL: define {{.*}}void @test_direct_assign_ptr(
+// CHECK-SANITIZE: %[[D:.*]] = load ptr, ptr %dest.addr
+// CHECK-SANITIZE: %[[S:.*]] = load ptr, ptr %src.addr
+// CHECK-SANITIZE: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %[[D]], ptr 
align 4 %[[S]], i64 4, i1 false)
+//
+// CHECK-NO-SANITIZE-LABEL: define {{.*}}void @test_direct_assign_ptr(
+// CHECK-NO-SANITIZE-NOT: @__ubsan_handle_type_mismatch
+void test_direct_assign_ptr(struct Small *dest, struct Small *src) {
+  *dest = *src;
+}
+
+// CHECK-SANITIZE-LABEL: define {{.*}}void @test_null_dest(
+// CHECK-SANITIZE: %[[D:.*]] = load ptr, ptr %dest
+// CHECK-SANITIZE: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %[[D]], ptr 
{{.*}}, i64 4, i1 false)
+//
+// CHECK-NO-SANITIZE-LABEL: define {{.*}}void @test_null_dest(
+// CHECK-NO-SANITIZE-NOT: @__ubsan_handle_type_mismatch
+void test_null_dest(struct Small *src) {
+  struct Small *dest = 0;
+  *dest = *src;
+}
+
+// CHECK-SANITIZE-LABEL: define {{.*}}void @test_nested_struct(
+// CHECK-SANITIZE: %[[VAL1:.*]] = icmp ne ptr %[[C:.*]], null
+// CHECK-SANITIZE: br i1 %{{.*}}, label %cont, label %handler.type_mismatch
+//
+// CHECK-NO-SANITIZE-LABEL: define {{.*}}void @test_nested_struct(
+// CHECK-NO-SANITIZE-NOT: @__ubsan_handle_type_mismatch
+void test_nested_struct(struct Container *c, struct Small *s) {
+  c->inner = *s;
+}
+
+// CHECK-SANITIZE-LABEL: define {{.*}}void @test_comma_operator(
+// CHECK-SANITIZE: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %{{.*}}, ptr 
align 4 %{{.*}}, i64 4, i1 false)
+//
+// CHECK-NO-SANITIZE-LABEL: define {{.*}}void @test_comma_operator(
+// CHECK-NO-SANITIZE-NOT: @__ubsan_handle_type_mismatch
+void test_comma_operator(struct Small *dest, struct Small *src) {
+  *dest = (0, *src);
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/175023
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to