[ubsan] Fix error summary message for ObjC BOOL invalid loads
authorVedant Kumar <vsk@apple.com>
Fri, 5 May 2017 01:35:42 +0000 (01:35 +0000)
committerVedant Kumar <vsk@apple.com>
Fri, 5 May 2017 01:35:42 +0000 (01:35 +0000)
llvm-svn: 302211

compiler-rt/lib/ubsan/ubsan_handlers.cc
compiler-rt/test/ubsan/TestCases/Misc/bool.m [new file with mode: 0644]

index de13ab8..d6a8f52 100644 (file)
@@ -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 (file)
index 0000000..0430b45
--- /dev/null
@@ -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]]
+}