From 6a877cfec43f88cef88308feb1be5eb9a58e5066 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Fri, 5 May 2017 01:35:42 +0000 Subject: [PATCH] [ubsan] Fix error summary message for ObjC BOOL invalid loads llvm-svn: 302211 --- compiler-rt/lib/ubsan/ubsan_handlers.cc | 3 ++- compiler-rt/test/ubsan/TestCases/Misc/bool.m | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 compiler-rt/test/ubsan/TestCases/Misc/bool.m diff --git a/compiler-rt/lib/ubsan/ubsan_handlers.cc b/compiler-rt/lib/ubsan/ubsan_handlers.cc index de13ab8..d6a8f52 100644 --- a/compiler-rt/lib/ubsan/ubsan_handlers.cc +++ b/compiler-rt/lib/ubsan/ubsan_handlers.cc @@ -410,7 +410,8 @@ static void handleLoadInvalidValue(InvalidValueData *Data, ValueHandle Val, SourceLocation Loc = Data->Loc.acquire(); // This check could be more precise if we used different handlers for // -fsanitize=bool and -fsanitize=enum. - bool IsBool = (0 == internal_strcmp(Data->Type.getTypeName(), "'bool'")); + bool IsBool = (0 == internal_strcmp(Data->Type.getTypeName(), "'bool'")) || + (0 == internal_strncmp(Data->Type.getTypeName(), "'BOOL'", 6)); ErrorType ET = IsBool ? ErrorType::InvalidBoolLoad : ErrorType::InvalidEnumLoad; diff --git a/compiler-rt/test/ubsan/TestCases/Misc/bool.m b/compiler-rt/test/ubsan/TestCases/Misc/bool.m new file mode 100644 index 0000000..0430b45 --- /dev/null +++ b/compiler-rt/test/ubsan/TestCases/Misc/bool.m @@ -0,0 +1,14 @@ +// RUN: %clang -fsanitize=bool %s -O3 -o %t +// RUN: not %run %t 2>&1 | FileCheck %s +// RUN: %env_ubsan_opts=print_summary=1:report_error_type=1 not %run %t 2>&1 | FileCheck %s --check-prefix=SUMMARY + +typedef char BOOL; +unsigned char NotABool = 123; + +int main(int argc, char **argv) { + BOOL *p = (BOOL*)&NotABool; + + // CHECK: bool.m:[[@LINE+1]]:10: runtime error: load of value 123, which is not a valid value for type 'BOOL' + return *p; + // SUMMARY: SUMMARY: {{.*}}Sanitizer: invalid-bool-load {{.*}}bool.m:[[@LINE-1]] +} -- 2.7.4