diff options
author | Nuno Lopes <nunoplopes@sapo.pt> | 2015-05-30 16:11:40 +0000 |
---|---|---|
committer | Nuno Lopes <nunoplopes@sapo.pt> | 2015-05-30 16:11:40 +0000 |
commit | 1ba2d78b9a1263e3f70ffa850d7756a8345a760d (patch) | |
tree | b2a05210be360cbc780ce53ada524164732c13fc /clang/test/CodeGen/catch-undef-behavior.c | |
parent | b08cf1cfd2b09774150376807bea9a74918e46e9 (diff) | |
download | bcm5719-llvm-1ba2d78b9a1263e3f70ffa850d7756a8345a760d.tar.gz bcm5719-llvm-1ba2d78b9a1263e3f70ffa850d7756a8345a760d.zip |
ubsan: Check for null pointers given to certain builtins, such
as memcpy, memset, memmove, and bzero.
Reviewed by: Richard Smith
Differential Revision: http://reviews.llvm.org/D9673
llvm-svn: 238657
Diffstat (limited to 'clang/test/CodeGen/catch-undef-behavior.c')
-rw-r--r-- | clang/test/CodeGen/catch-undef-behavior.c | 28 |
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) { |