summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/catch-undef-behavior.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGen/catch-undef-behavior.c')
-rw-r--r--clang/test/CodeGen/catch-undef-behavior.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/CodeGen/catch-undef-behavior.c b/clang/test/CodeGen/catch-undef-behavior.c
index a4386588757..66954190aff 100644
--- a/clang/test/CodeGen/catch-undef-behavior.c
+++ b/clang/test/CodeGen/catch-undef-behavior.c
@@ -371,6 +371,34 @@ void call_decl_nonnull(int *a) {
decl_nonnull(a);
}
+extern void *memcpy (void *, const void *, unsigned) __attribute__((nonnull(1, 2)));
+
+// CHECK-COMMON-LABEL: @call_memcpy_nonnull
+void call_memcpy_nonnull(void *p, void *q, int sz) {
+ // CHECK-COMMON: icmp ne i8* {{.*}}, null
+ // CHECK-UBSAN: call void @__ubsan_handle_nonnull_arg
+ // CHECK-TRAP: call void @llvm.trap()
+
+ // CHECK-COMMON: icmp ne i8* {{.*}}, null
+ // CHECK-UBSAN: call void @__ubsan_handle_nonnull_arg
+ // CHECK-TRAP: call void @llvm.trap()
+ memcpy(p, q, sz);
+}
+
+extern void *memmove (void *, const void *, unsigned) __attribute__((nonnull(1, 2)));
+
+// CHECK-COMMON-LABEL: @call_memmove_nonnull
+void call_memmove_nonnull(void *p, void *q, int sz) {
+ // CHECK-COMMON: icmp ne i8* {{.*}}, null
+ // CHECK-UBSAN: call void @__ubsan_handle_nonnull_arg
+ // CHECK-TRAP: call void @llvm.trap()
+
+ // CHECK-COMMON: icmp ne i8* {{.*}}, null
+ // CHECK-UBSAN: call void @__ubsan_handle_nonnull_arg
+ // CHECK-TRAP: call void @llvm.trap()
+ memmove(p, q, sz);
+}
+
// CHECK-COMMON-LABEL: @call_nonnull_variadic
__attribute__((nonnull)) void nonnull_variadic(int a, ...);
void call_nonnull_variadic(int a, int *b) {
OpenPOWER on IntegriCloud