From 2d2ad633eaae0156f8eb1a54e1c231edb9267753 Mon Sep 17 00:00:00 2001 From: Scott Graham Date: Thu, 5 Feb 2015 09:35:54 -0800 Subject: [PATCH] win: Fixes for minidump_misc_info_writer_test.cc MINIDUMP_MISC_INFO and MINIDUMP_MISC_INFO_2, etc. are not derived from each other in Windows' dbghelp.h, so need a reinterpret_cast. arraysize fails on Struct::Member with a big mess (below) but works ok on a local stack instance. d:\src\crashpad\crashpad\minidump\minidump_misc_info_writer_test.cc(405) : error C2664: 'std::basic_string,std::allocator>::basic_string(std::initializer_list<_Elem>,const std::allocator &)' : cannot convert argument 1 from 'char' to 'const std::basic_string,std::allocator> &' with [ _Elem=char ] Reason: cannot convert from 'char' to 'const std::basic_string,std::allocator>' No constructor could take the source type, or constructor overload resolution was ambiguous d:\src\crashpad\crashpad\minidump\minidump_misc_info_writer_test.cc(408) : error C2784: 'char (&ArraySizeHelper(const T (&)[N]))[N]' : could not deduce template argument for 'const T (&)[N]' from 'unknown' d:\src\crashpad\crashpad\third_party\mini_chromium\mini_chromium\base\basictypes.h(39) : see declaration of 'ArraySizeHelper' R=mark@chromium.org BUG=crashpad:1 Review URL: https://codereview.chromium.org/899163004 --- minidump/minidump_misc_info_writer_test.cc | 38 +++++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/minidump/minidump_misc_info_writer_test.cc b/minidump/minidump_misc_info_writer_test.cc index 3790f16e..66ac3d52 100644 --- a/minidump/minidump_misc_info_writer_test.cc +++ b/minidump/minidump_misc_info_writer_test.cc @@ -21,6 +21,7 @@ #include #include "base/basictypes.h" +#include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" @@ -99,7 +100,9 @@ template <> void ExpectMiscInfoEqual( const MINIDUMP_MISC_INFO_2* expected, const MINIDUMP_MISC_INFO_2* observed) { - ExpectMiscInfoEqual(expected, observed); + ExpectMiscInfoEqual( + reinterpret_cast(expected), + reinterpret_cast(observed)); EXPECT_EQ(expected->ProcessorMaxMhz, observed->ProcessorMaxMhz); EXPECT_EQ(expected->ProcessorCurrentMhz, observed->ProcessorCurrentMhz); EXPECT_EQ(expected->ProcessorMhzLimit, observed->ProcessorMhzLimit); @@ -112,7 +115,9 @@ template <> void ExpectMiscInfoEqual( const MINIDUMP_MISC_INFO_3* expected, const MINIDUMP_MISC_INFO_3* observed) { - ExpectMiscInfoEqual(expected, observed); + ExpectMiscInfoEqual( + reinterpret_cast(expected), + reinterpret_cast(observed)); EXPECT_EQ(expected->ProcessIntegrityLevel, observed->ProcessIntegrityLevel); EXPECT_EQ(expected->ProcessExecuteFlags, observed->ProcessExecuteFlags); EXPECT_EQ(expected->ProtectedProcess, observed->ProtectedProcess); @@ -142,7 +147,9 @@ template <> void ExpectMiscInfoEqual( const MINIDUMP_MISC_INFO_4* expected, const MINIDUMP_MISC_INFO_4* observed) { - ExpectMiscInfoEqual(expected, observed); + ExpectMiscInfoEqual( + reinterpret_cast(expected), + reinterpret_cast(observed)); { SCOPED_TRACE("BuildString"); ExpectNULPaddedString16Equal(expected->BuildString, @@ -392,12 +399,11 @@ TEST(MinidumpMiscInfoWriter, TimeZoneStringsOverflow) { const uint32_t kTimeZoneId = 2; const int32_t kBias = 300; - std::string standard_name( - arraysize(decltype(MINIDUMP_MISC_INFO_N::TimeZone)::StandardName) + 1, - 's'); + MINIDUMP_MISC_INFO_N tmp; + ALLOW_UNUSED_LOCAL(tmp); + std::string standard_name(arraysize(tmp.TimeZone.StandardName) + 1, 's'); const int32_t kStandardBias = 0; - std::string daylight_name( - arraysize(decltype(MINIDUMP_MISC_INFO_N::TimeZone)::DaylightName), 'd'); + std::string daylight_name(arraysize(tmp.TimeZone.DaylightName), 'd'); const int32_t kDaylightBias = -60; // Test using kSystemTimeZero, because not all platforms will be able to @@ -484,10 +490,10 @@ TEST(MinidumpMiscInfoWriter, BuildStringsOverflow) { MinidumpFileWriter minidump_file_writer; auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); - std::string build_string(arraysize(MINIDUMP_MISC_INFO_N::BuildString) + 1, - 'B'); - std::string debug_build_string(arraysize(MINIDUMP_MISC_INFO_N::DbgBldStr), - 'D'); + MINIDUMP_MISC_INFO_4 tmp; + ALLOW_UNUSED_LOCAL(tmp); + std::string build_string(arraysize(tmp.BuildString) + 1, 'B'); + std::string debug_build_string(arraysize(tmp.DbgBldStr), 'D'); misc_info_writer->SetBuildString(build_string, debug_build_string); @@ -670,11 +676,11 @@ TEST(MinidumpMiscInfoWriter, InitializeFromSnapshot) { arraysize(expect_misc_info.DbgBldStr)); const timeval kStartTime = - { implicit_cast(expect_misc_info.ProcessCreateTime), 0 }; + { static_cast(expect_misc_info.ProcessCreateTime), 0 }; const timeval kUserCPUTime = - { implicit_cast(expect_misc_info.ProcessUserTime), 0 }; + { static_cast(expect_misc_info.ProcessUserTime), 0 }; const timeval kSystemCPUTime = - { implicit_cast(expect_misc_info.ProcessKernelTime), 0 }; + { static_cast(expect_misc_info.ProcessKernelTime), 0 }; TestProcessSnapshot process_snapshot; process_snapshot.SetProcessID(expect_misc_info.ProcessId); @@ -682,7 +688,7 @@ TEST(MinidumpMiscInfoWriter, InitializeFromSnapshot) { process_snapshot.SetProcessCPUTimes(kUserCPUTime, kSystemCPUTime); auto system_snapshot = make_scoped_ptr(new TestSystemSnapshot()); - const uint64_t kHzPerMHz = 1E6; + const uint64_t kHzPerMHz = static_cast(1E6); system_snapshot->SetCPUFrequency( expect_misc_info.ProcessorCurrentMhz * kHzPerMHz, expect_misc_info.ProcessorMaxMhz * kHzPerMHz);