summaryrefslogtreecommitdiff
path: root/lib/ubsan/ubsan_handlers.cc
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-12-13 07:00:14 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-12-13 07:00:14 +0000
commitf2d77d03b75733139c9f0896162bbc7a6fc38385 (patch)
tree15565e23e346bb09944af09885fe1bb8773183b3 /lib/ubsan/ubsan_handlers.cc
parent6afa1b0406f5cce7256d4f8717bfe394a16999b5 (diff)
ubsan: Add -fsanitize=bool and -fsanitize=enum, which check for loads of
bit-patterns which are not valid values for enumerated or boolean types. These checks are the ubsan analogue of !range metadata. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@170107 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ubsan/ubsan_handlers.cc')
-rw-r--r--lib/ubsan/ubsan_handlers.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/ubsan/ubsan_handlers.cc b/lib/ubsan/ubsan_handlers.cc
index 47f06e8f4..91ff4df0a 100644
--- a/lib/ubsan/ubsan_handlers.cc
+++ b/lib/ubsan/ubsan_handlers.cc
@@ -179,3 +179,15 @@ void __ubsan::__ubsan_handle_float_cast_overflow_abort(
__ubsan_handle_float_cast_overflow(Data, From);
Die();
}
+
+void __ubsan::__ubsan_handle_load_invalid_value(InvalidValueData *Data,
+ ValueHandle Val) {
+ Diag(SourceLocation(), "load of value %0, which is not a valid value for "
+ "type %1")
+ << Value(Data->Type, Val) << Data->Type;
+}
+void __ubsan::__ubsan_handle_load_invalid_value_abort(InvalidValueData *Data,
+ ValueHandle Val) {
+ __ubsan_handle_load_invalid_value(Data, Val);
+ Die();
+}