diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-12-13 07:00:14 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-12-13 07:00:14 +0000 |
commit | f2d77d03b75733139c9f0896162bbc7a6fc38385 (patch) | |
tree | 15565e23e346bb09944af09885fe1bb8773183b3 /lib/ubsan/ubsan_handlers.cc | |
parent | 6afa1b0406f5cce7256d4f8717bfe394a16999b5 (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.cc | 12 |
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(); +} |