summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkosak <kosak@google.com>2013-12-03 22:38:22 (GMT)
committerkosak <kosak@google.com>2013-12-03 22:38:22 (GMT)
commit37b97d1c93fb8283f8bbf54f5618c1c1e5a4726a (patch)
tree0949bd9f08f265d8b29d513095775a69964dee0e
parentaa34ae250800af7e98499abba44636503cf99b16 (diff)
downloadgoogletest-37b97d1c93fb8283f8bbf54f5618c1c1e5a4726a.zip
googletest-37b97d1c93fb8283f8bbf54f5618c1c1e5a4726a.tar.gz
googletest-37b97d1c93fb8283f8bbf54f5618c1c1e5a4726a.tar.bz2
Add MemorySanitizer annotations in gtest printers. Also remove unused variable kPathSeparatorString.
-rw-r--r--include/gtest/internal/gtest-port.h13
-rw-r--r--src/gtest-filepath.cc2
-rw-r--r--src/gtest-printers.cc3
3 files changed, 16 insertions, 2 deletions
diff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h
index dc4fe0c..a6726b4 100644
--- a/include/gtest/internal/gtest-port.h
+++ b/include/gtest/internal/gtest-port.h
@@ -782,6 +782,19 @@ using ::std::tuple_size;
# define GTEST_HAS_CXXABI_H_ 0
#endif
+// A function level attribute to disable checking for use of uninitialized
+// memory when built with MemorySanitizer.
+#if defined(__clang__)
+# if __has_feature(memory_sanitizer)
+# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \
+ __attribute__((no_sanitize_memory))
+# else
+# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
+# endif
+#else
+# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
+#endif
+
namespace testing {
class Message;
diff --git a/src/gtest-filepath.cc b/src/gtest-filepath.cc
index 6be58b6..d221cfd 100644
--- a/src/gtest-filepath.cc
+++ b/src/gtest-filepath.cc
@@ -70,7 +70,6 @@ namespace internal {
// of them.
const char kPathSeparator = '\\';
const char kAlternatePathSeparator = '/';
-const char kPathSeparatorString[] = "\\";
const char kAlternatePathSeparatorString[] = "/";
# if GTEST_OS_WINDOWS_MOBILE
// Windows CE doesn't have a current directory. You should not use
@@ -84,7 +83,6 @@ const char kCurrentDirectoryString[] = ".\\";
# endif // GTEST_OS_WINDOWS_MOBILE
#else
const char kPathSeparator = '/';
-const char kPathSeparatorString[] = "/";
const char kCurrentDirectoryString[] = "./";
#endif // GTEST_OS_WINDOWS
diff --git a/src/gtest-printers.cc b/src/gtest-printers.cc
index 75fa408..0db5b44 100644
--- a/src/gtest-printers.cc
+++ b/src/gtest-printers.cc
@@ -56,6 +56,7 @@ namespace {
using ::std::ostream;
// Prints a segment of bytes in the given object.
+GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start,
size_t count, ostream* os) {
char text[5] = "";
@@ -252,6 +253,7 @@ void PrintTo(wchar_t wc, ostream* os) {
// The array starts at begin, the length is len, it may include '\0' characters
// and may not be NUL-terminated.
template <typename CharType>
+GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
static void PrintCharsAsStringTo(
const CharType* begin, size_t len, ostream* os) {
const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\"";
@@ -273,6 +275,7 @@ static void PrintCharsAsStringTo(
// Prints a (const) char/wchar_t array of 'len' elements, starting at address
// 'begin'. CharType must be either char or wchar_t.
template <typename CharType>
+GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
static void UniversalPrintCharArray(
const CharType* begin, size_t len, ostream* os) {
// The code