From 5069c2903a1be6e717c526595c85f8736033e5e8 Mon Sep 17 00:00:00 2001 From: Scott Graham Date: Mon, 14 Sep 2015 11:09:46 -0700 Subject: [PATCH] Replace implicit_cast usage with static_cast. chromium's implicit_cast is going to be removed so stop using it. BUG=529769,472900 R=mark@chromium.org Review URL: https://codereview.chromium.org/1335353002 . --- client/capture_context_mac_test.cc | 2 +- client/simple_string_dictionary.h | 1 + client/simulate_crash_mac.cc | 1 + client/simulate_crash_mac_test.cc | 1 + minidump/minidump_module_writer.cc | 1 + minidump/minidump_module_writer_test.cc | 1 + minidump/minidump_system_info_writer.cc | 1 + minidump/test/minidump_writable_test_util.cc | 2 +- snapshot/cpu_context.cc | 1 + snapshot/mac/mach_o_image_reader.cc | 1 + snapshot/mac/mach_o_image_reader_test.cc | 1 + util/misc/implicit_cast.h | 44 ++++++++++++++++++++ util/util.gyp | 1 + 13 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 util/misc/implicit_cast.h diff --git a/client/capture_context_mac_test.cc b/client/capture_context_mac_test.cc index 2e744cd3..5b0b643e 100644 --- a/client/capture_context_mac_test.cc +++ b/client/capture_context_mac_test.cc @@ -19,9 +19,9 @@ #include -#include "base/basictypes.h" #include "build/build_config.h" #include "gtest/gtest.h" +#include "util/misc/implicit_cast.h" namespace crashpad { namespace test { diff --git a/client/simple_string_dictionary.h b/client/simple_string_dictionary.h index 73eba626..edaca6fb 100644 --- a/client/simple_string_dictionary.h +++ b/client/simple_string_dictionary.h @@ -19,6 +19,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "util/misc/implicit_cast.h" namespace crashpad { diff --git a/client/simulate_crash_mac.cc b/client/simulate_crash_mac.cc index cdcf662d..763cb87e 100644 --- a/client/simulate_crash_mac.cc +++ b/client/simulate_crash_mac.cc @@ -28,6 +28,7 @@ #include "util/mach/exception_behaviors.h" #include "util/mach/exception_ports.h" #include "util/mach/mach_extensions.h" +#include "util/misc/implicit_cast.h" namespace crashpad { diff --git a/client/simulate_crash_mac_test.cc b/client/simulate_crash_mac_test.cc index 7e0109a3..8953114a 100644 --- a/client/simulate_crash_mac_test.cc +++ b/client/simulate_crash_mac_test.cc @@ -30,6 +30,7 @@ #include "util/mach/mach_message.h" #include "util/mach/mach_message_server.h" #include "util/mach/symbolic_constants_mach.h" +#include "util/misc/implicit_cast.h" namespace crashpad { namespace test { diff --git a/minidump/minidump_module_writer.cc b/minidump/minidump_module_writer.cc index 33c83a75..58d399d6 100644 --- a/minidump/minidump_module_writer.cc +++ b/minidump/minidump_module_writer.cc @@ -24,6 +24,7 @@ #include "minidump/minidump_writer_util.h" #include "snapshot/module_snapshot.h" #include "util/file/file_writer.h" +#include "util/misc/implicit_cast.h" #include "util/numeric/in_range_cast.h" #include "util/numeric/safe_assignment.h" diff --git a/minidump/minidump_module_writer_test.cc b/minidump/minidump_module_writer_test.cc index 0605474f..d5cc02b0 100644 --- a/minidump/minidump_module_writer_test.cc +++ b/minidump/minidump_module_writer_test.cc @@ -32,6 +32,7 @@ #include "snapshot/test/test_module_snapshot.h" #include "test/gtest_death_check.h" #include "util/file/string_file.h" +#include "util/misc/implicit_cast.h" #include "util/misc/uuid.h" #include "util/stdlib/pointer_container.h" diff --git a/minidump/minidump_system_info_writer.cc b/minidump/minidump_system_info_writer.cc index 309f3a39..88687234 100644 --- a/minidump/minidump_system_info_writer.cc +++ b/minidump/minidump_system_info_writer.cc @@ -21,6 +21,7 @@ #include "minidump/minidump_string_writer.h" #include "snapshot/system_snapshot.h" #include "util/file/file_writer.h" +#include "util/misc/implicit_cast.h" namespace crashpad { diff --git a/minidump/test/minidump_writable_test_util.cc b/minidump/test/minidump_writable_test_util.cc index 71e8b913..d16aed94 100644 --- a/minidump/test/minidump_writable_test_util.cc +++ b/minidump/test/minidump_writable_test_util.cc @@ -16,10 +16,10 @@ #include -#include "base/basictypes.h" #include "base/strings/string16.h" #include "gtest/gtest.h" #include "util/file/file_writer.h" +#include "util/misc/implicit_cast.h" namespace crashpad { namespace test { diff --git a/snapshot/cpu_context.cc b/snapshot/cpu_context.cc index 2f7ab976..82839db8 100644 --- a/snapshot/cpu_context.cc +++ b/snapshot/cpu_context.cc @@ -16,6 +16,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "util/misc/implicit_cast.h" namespace crashpad { diff --git a/snapshot/mac/mach_o_image_reader.cc b/snapshot/mac/mach_o_image_reader.cc index cb85baab..09b7ffeb 100644 --- a/snapshot/mac/mach_o_image_reader.cc +++ b/snapshot/mac/mach_o_image_reader.cc @@ -29,6 +29,7 @@ #include "snapshot/mac/mach_o_image_symbol_table_reader.h" #include "snapshot/mac/process_reader.h" #include "util/mac/checked_mach_address_range.h" +#include "util/misc/implicit_cast.h" namespace { diff --git a/snapshot/mac/mach_o_image_reader_test.cc b/snapshot/mac/mach_o_image_reader_test.cc index 79329096..b2e5fed3 100644 --- a/snapshot/mac/mach_o_image_reader_test.cc +++ b/snapshot/mac/mach_o_image_reader_test.cc @@ -32,6 +32,7 @@ #include "snapshot/mac/process_reader.h" #include "snapshot/mac/process_types.h" #include "test/mac/dyld.h" +#include "util/misc/implicit_cast.h" #include "util/misc/uuid.h" // This file is responsible for testing MachOImageReader, diff --git a/util/misc/implicit_cast.h b/util/misc/implicit_cast.h new file mode 100644 index 00000000..6f8a1a30 --- /dev/null +++ b/util/misc/implicit_cast.h @@ -0,0 +1,44 @@ +// Copyright 2015 The Crashpad Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef CRASHPAD_UTIL_MISC_IMPLICIT_CAST_H_ +#define CRASHPAD_UTIL_MISC_IMPLICIT_CAST_H_ + +namespace crashpad { + +// Use implicit_cast as a safe version of static_cast or const_cast +// for upcasting in the type hierarchy (i.e. casting a pointer to Foo +// to a pointer to SuperclassOfFoo or casting a pointer to Foo to +// a const pointer to Foo). +// When you use implicit_cast, the compiler checks that the cast is safe. +// Such explicit implicit_casts are necessary in surprisingly many +// situations where C++ demands an exact type match instead of an +// argument type convertible to a target type. +// +// The From type can be inferred, so the preferred syntax for using +// implicit_cast is the same as for static_cast etc.: +// +// implicit_cast(expr) +// +// implicit_cast would have been part of the C++ standard library, +// but the proposal was submitted too late. It will probably make +// its way into the language in the future. +template +inline To implicit_cast(From const &f) { + return f; +} + +} // namespace crashpad + +#endif // CRASHPAD_UTIL_MISC_IMPLICIT_CAST_H_ diff --git a/util/util.gyp b/util/util.gyp index 1e06efb2..0f626ad0 100644 --- a/util/util.gyp +++ b/util/util.gyp @@ -88,6 +88,7 @@ 'misc/clock_mac.cc', 'misc/clock_posix.cc', 'misc/clock_win.cc', + 'misc/implicit_cast.h', 'misc/initialization_state.h', 'misc/initialization_state_dcheck.cc', 'misc/initialization_state_dcheck.h',