diff --git a/src/base/files/file_path.h b/src/base/files/file_path.h
index b136670..2359bb6 100644
--- a/src/base/files/file_path.h
+++ b/src/base/files/file_path.h
@@ -124,11 +124,13 @@
 
 // To print path names portably use PRIsFP (based on PRIuS and friends from
 // C99 and format_macros.h) like this:
-// base::StringPrintf("Path is %" PRIsFP ".\n", path.value().c_str());
+// base::StringPrintf("Path is %" PRIsFP ".\n", PATH_CSTR(path);
 #if defined(OS_WIN)
 #define PRIsFP "ls"
+#define PATH_CSTR(x) reinterpret_cast<const wchar_t*>(x.value().c_str())
 #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
 #define PRIsFP "s"
+#define PATH_CSTR(x) (x.value().c_str())
 #endif  // OS_WIN
 
 namespace base {
diff --git a/src/base/files/file_win.cc b/src/base/files/file_win.cc
index 9aae162..4bce7df 100644
--- a/src/base/files/file_win.cc
+++ b/src/base/files/file_win.cc
@@ -59,7 +59,7 @@
   LARGE_INTEGER offset_li;
   offset_li.QuadPart = offset;
 
-  OVERLAPPED overlapped = {0};
+  OVERLAPPED overlapped = {};
   overlapped.Offset = offset_li.LowPart;
   overlapped.OffsetHigh = offset_li.HighPart;
 
@@ -104,7 +104,7 @@
   LARGE_INTEGER offset_li;
   offset_li.QuadPart = offset;
 
-  OVERLAPPED overlapped = {0};
+  OVERLAPPED overlapped = {};
   overlapped.Offset = offset_li.LowPart;
   overlapped.OffsetHigh = offset_li.HighPart;
 
diff --git a/src/base/gtest_prod_util.h b/src/base/gtest_prod_util.h
index 664dded..b3b1175 100644
--- a/src/base/gtest_prod_util.h
+++ b/src/base/gtest_prod_util.h
@@ -7,10 +7,6 @@
 
 // TODO: Remove me.
 #define FRIEND_TEST_ALL_PREFIXES(test_case_name, test_name) \
-  friend class test_case_name##test_name
-
-// TODO: Remove me.
-#define FORWARD_DECLARE_TEST(test_case_name, test_name) \
-  class test_case_name##test_name
+  friend struct test_case_name##test_name
 
 #endif  // BASE_GTEST_PROD_UTIL_H_
diff --git a/src/base/json/json_writer.cc b/src/base/json/json_writer.cc
index 656a87c..912a7f0 100644
--- a/src/base/json/json_writer.cc
+++ b/src/base/json/json_writer.cc
@@ -48,8 +48,6 @@
 
 JSONWriter::JSONWriter(int options, std::string* json)
     : omit_binary_values_((options & OPTIONS_OMIT_BINARY_VALUES) != 0),
-      omit_double_type_preservation_(
-          (options & OPTIONS_OMIT_DOUBLE_TYPE_PRESERVATION) != 0),
       pretty_print_((options & OPTIONS_PRETTY_PRINT) != 0),
       json_string_(json) {
   DCHECK(json);
diff --git a/src/base/json/json_writer.h b/src/base/json/json_writer.h
index 7edd3a6..4114f77 100644
--- a/src/base/json/json_writer.h
+++ b/src/base/json/json_writer.h
@@ -24,12 +24,6 @@
     // encountered, failure will be returned.
     OPTIONS_OMIT_BINARY_VALUES = 1 << 0,
 
-    // This option instructs the writer to write doubles that have no fractional
-    // part as a normal integer (i.e., without using exponential notation
-    // or appending a '.0') as long as the value is within the range of a
-    // 64-bit int.
-    OPTIONS_OMIT_DOUBLE_TYPE_PRESERVATION = 1 << 1,
-
     // Return a slightly nicer formatted json string (pads with whitespace to
     // help with readability).
     OPTIONS_PRETTY_PRINT = 1 << 2,
@@ -60,7 +54,6 @@
   void IndentLine(size_t depth);
 
   bool omit_binary_values_;
-  bool omit_double_type_preservation_;
   bool pretty_print_;
 
   // Where we write JSON data as we generate it.
diff --git a/src/base/logging.cc b/src/base/logging.cc
index a8ccd6f..ee60c47 100644
--- a/src/base/logging.cc
+++ b/src/base/logging.cc
@@ -140,18 +140,18 @@
 #endif  // defined(OS_WIN)
 
 LogMessage::LogMessage(const char* file, int line, LogSeverity severity)
-    : severity_(severity), file_(file), line_(line) {
+    : severity_(severity) {
   Init(file, line);
 }
 
 LogMessage::LogMessage(const char* file, int line, const char* condition)
-    : severity_(LOG_FATAL), file_(file), line_(line) {
+    : severity_(LOG_FATAL) {
   Init(file, line);
   stream_ << "Check failed: " << condition << ". ";
 }
 
 LogMessage::LogMessage(const char* file, int line, std::string* result)
-    : severity_(LOG_FATAL), file_(file), line_(line) {
+    : severity_(LOG_FATAL) {
   Init(file, line);
   stream_ << "Check failed: " << *result;
   delete result;
@@ -161,7 +161,7 @@
                        int line,
                        LogSeverity severity,
                        std::string* result)
-    : severity_(severity), file_(file), line_(line) {
+    : severity_(severity) {
   Init(file, line);
   stream_ << "Check failed: " << *result;
   delete result;
diff --git a/src/base/logging.h b/src/base/logging.h
index c581d33..78cad59 100644
--- a/src/base/logging.h
+++ b/src/base/logging.h
@@ -730,16 +730,7 @@
 #define DCHECK_GE(val1, val2) DCHECK_OP(GE, >=, val1, val2)
 #define DCHECK_GT(val1, val2) DCHECK_OP(GT, >, val1, val2)
 
-#if !DCHECK_IS_ON() && defined(OS_CHROMEOS)
-// Implement logging of NOTREACHED() as a dedicated function to get function
-// call overhead down to a minimum.
-void LogErrorNotReached(const char* file, int line);
-#define NOTREACHED()                                       \
-  true ? ::logging::LogErrorNotReached(__FILE__, __LINE__) \
-       : EAT_STREAM_PARAMETERS
-#else
 #define NOTREACHED() DCHECK(false)
-#endif
 
 // Redefine the standard assert to use our nice log files
 #undef assert
@@ -785,9 +776,6 @@
   std::ostringstream stream_;
   size_t message_start_;  // Offset of the start of the message (past prefix
                           // info).
-  // The file and line information passed in to the constructor.
-  const char* file_;
-  const int line_;
 
 #if defined(OS_WIN)
   // Stores the current value of GetLastError in the constructor and restores
diff --git a/src/gn/compile_commands_writer.cc b/src/gn/compile_commands_writer.cc
index 11afbf3..10984cc 100644
--- a/src/gn/compile_commands_writer.cc
+++ b/src/gn/compile_commands_writer.cc
@@ -242,7 +242,7 @@
       compile_commands->append(kPrettyPrintLineEnding);
 
       WriteFile(source, path_output, compile_commands);
-      WriteDirectory(base::StringPrintf("%" PRIsFP, build_dir.value().c_str()),
+      WriteDirectory(base::StringPrintf("%" PRIsFP, PATH_CSTR(build_dir)),
                      compile_commands);
       WriteCommand(target, source, flags, tool_outputs, path_output,
                    source_type, tool_name, opts, compile_commands);
diff --git a/src/gn/desc_builder.cc b/src/gn/desc_builder.cc
index e52bb6a..57b253d 100644
--- a/src/gn/desc_builder.cc
+++ b/src/gn/desc_builder.cc
@@ -478,7 +478,7 @@
     if (target_->output_type() == Target::GENERATED_FILE) {
       if (what(variables::kWriteOutputConversion)) {
         res->SetKey(variables::kWriteOutputConversion,
-                    std::move(ToBaseValue(target_->output_conversion())));
+                    ToBaseValue(target_->output_conversion()));
       }
       if (what(variables::kDataKeys)) {
         base::ListValue keys;
diff --git a/src/gn/ninja_c_binary_target_writer_unittest.cc b/src/gn/ninja_c_binary_target_writer_unittest.cc
index f79b753..48ff9e4 100644
--- a/src/gn/ninja_c_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_c_binary_target_writer_unittest.cc
@@ -175,7 +175,7 @@
       "defines = -DBOOL_DEF -DINT_DEF=123 -DSTR_DEF=\\\"ABCD-1\\\"";
 #endif
   std::string out_str = out.str();
-  EXPECT_TRUE(out_str.find(out_str) != std::string::npos);
+  EXPECT_TRUE(out_str.find(expectedSubstr) != std::string::npos);
 }
 
 TEST_F(NinjaCBinaryTargetWriterTest, StaticLibrary) {
diff --git a/src/gn/parse_tree.cc b/src/gn/parse_tree.cc
index a2f77bc..e1fc5a5 100644
--- a/src/gn/parse_tree.cc
+++ b/src/gn/parse_tree.cc
@@ -490,7 +490,7 @@
     child.GetList().push_back(if_false_->GetJSONNode());
   }
   dict.SetKey(kJsonNodeChild, std::move(child));
-  return std::move(dict);
+  return dict;
 }
 
 // FunctionCallNode -----------------------------------------------------------
diff --git a/src/gn/rust_values.h b/src/gn/rust_values.h
index d666f5a..9770e34 100644
--- a/src/gn/rust_values.h
+++ b/src/gn/rust_values.h
@@ -41,8 +41,7 @@
   void set_crate_root(SourceFile& s) { crate_root_ = s; }
 
   // Crate type for compilation.
-  CrateType crate_type() { return crate_type_; }
-  const CrateType crate_type() const { return crate_type_; }
+  CrateType crate_type() const { return crate_type_; }
   void set_crate_type(CrateType s) { crate_type_ = s; }
 
   // Any renamed dependencies for the `extern` flags.
diff --git a/src/gn/value.cc b/src/gn/value.cc
index 233a523..c3bb9b5 100644
--- a/src/gn/value.cc
+++ b/src/gn/value.cc
@@ -37,19 +37,19 @@
 }
 
 Value::Value(const ParseNode* origin, bool bool_val)
-    : type_(BOOLEAN), boolean_value_(bool_val), origin_(origin) {}
+    : type_(BOOLEAN), origin_(origin), boolean_value_(bool_val) {}
 
 Value::Value(const ParseNode* origin, int64_t int_val)
-    : type_(INTEGER), int_value_(int_val), origin_(origin) {}
+    : type_(INTEGER), origin_(origin), int_value_(int_val) {}
 
 Value::Value(const ParseNode* origin, std::string str_val)
-    : type_(STRING), string_value_(std::move(str_val)), origin_(origin) {}
+    : type_(STRING), origin_(origin), string_value_(std::move(str_val)) {}
 
 Value::Value(const ParseNode* origin, const char* str_val)
-    : type_(STRING), string_value_(str_val), origin_(origin) {}
+    : type_(STRING), origin_(origin), string_value_(str_val) {}
 
 Value::Value(const ParseNode* origin, std::unique_ptr<Scope> scope)
-    : type_(SCOPE), scope_value_(std::move(scope)), origin_(origin) {}
+    : type_(SCOPE), origin_(origin), scope_value_(std::move(scope)) {}
 
 Value::Value(const Value& other) : type_(other.type_), origin_(other.origin_) {
   switch (type_) {
diff --git a/src/util/test/test.h b/src/util/test/test.h
index b5539d7..d3fc056 100644
--- a/src/util/test/test.h
+++ b/src/util/test/test.h
@@ -30,7 +30,6 @@
   friend class TestResult;
 
   bool failed_;
-  int assertion_failures_;
 };
 
 extern testing::Test* g_current_test;
