[asan] Fixed test failing on windows due to different printf behaviour.
authorVy Nguyen <vyng@google.com>
Sat, 13 Mar 2021 02:00:11 +0000 (21:00 -0500)
committerVy Nguyen <vyng@google.com>
Mon, 15 Mar 2021 14:58:40 +0000 (10:58 -0400)
%p reported prints upper case hex chars on Windows.
The fix  is to switch to using %#lx

Differential Revision: https://reviews.llvm.org/D98570

compiler-rt/test/asan/TestCases/wild_pointer.cpp

index 80c3e2b..8969a28 100644 (file)
@@ -2,7 +2,9 @@
 // RUN: not %run %t 2>&1 | FileCheck %s
 // REQUIRES: asan-64-bits
 
+#include <inttypes.h>
 #include <stdarg.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <string.h>
 
@@ -10,9 +12,17 @@ int main() {
   char *p = new char;
   char *dest = new char;
   const size_t offset = 0x4567890123456789;
+
+  // The output here needs to match the output from the sanitizer runtime,
+  // which includes 0x and prints hex in lower case.
+  //
+  // On Windows, %p omits %0x and prints hex characters in upper case,
+  // so we use PRIxPTR instead of %p.
+  fprintf(stderr, "Expected bad addr: %#" PRIxPTR "\n",
+          reinterpret_cast<uintptr_t>(p + offset));
   // Flush it so the output came out before the asan report.
-  fprintf(stderr, "Expected bad addr: %p\n", p + offset);
   fflush(stderr);
+
   memmove(dest, p, offset);
   return 0;
 }