diff --git a/src/base/compiler_specific.h b/src/base/compiler_specific.h
index b788a8c..ec139d2 100644
--- a/src/base/compiler_specific.h
+++ b/src/base/compiler_specific.h
@@ -56,7 +56,9 @@
 #endif  // !defined(LIKELY)
 
 // Macro for telling -Wimplicit-fallthrough that a fallthrough is intentional.
-#if defined(__clang__)
+#if __cplusplus >= 201703L
+#define FALLTHROUGH [[fallthrough]]
+#elif defined(__clang__)
 #define FALLTHROUGH [[clang::fallthrough]]
 #else
 #define FALLTHROUGH
diff --git a/src/gn/desc_builder.cc b/src/gn/desc_builder.cc
index 5a8fc4c..444a5e0 100644
--- a/src/gn/desc_builder.cc
+++ b/src/gn/desc_builder.cc
@@ -136,7 +136,7 @@
     for (const auto& v : vector)
       res->Append(RenderValue(v));
 
-    return std::move(res);
+    return res;
   }
 
   ValuePtr RenderValue(const std::string& s, bool optional = false) {
@@ -712,7 +712,7 @@
       }
     }
 
-    return std::move(res);
+    return res;
   }
 
   ValuePtr RenderGenDeps() {
@@ -724,7 +724,7 @@
     std::sort(gen_deps.begin(), gen_deps.end());
     for (const auto& dep : gen_deps)
       res->AppendString(dep);
-    return std::move(res);
+    return res;
   }
 
   ValuePtr RenderRuntimeDeps() {
@@ -750,7 +750,7 @@
       res->AppendString(str + pair.first.value());
     }
 
-    return std::move(res);
+    return res;
   }
 
   void FillInSourceOutputs(base::DictionaryValue* res) {
diff --git a/src/gn/parser.cc b/src/gn/parser.cc
index dbc3d62..a4ad244 100644
--- a/src/gn/parser.cc
+++ b/src/gn/parser.cc
@@ -472,7 +472,7 @@
   std::unique_ptr<BlockCommentNode> comment =
       std::make_unique<BlockCommentNode>();
   comment->set_comment(token);
-  return std::move(comment);
+  return comment;
 }
 
 std::unique_ptr<ParseNode> Parser::Group(const Token& token) {
@@ -495,7 +495,7 @@
   std::unique_ptr<UnaryOpNode> unary_op = std::make_unique<UnaryOpNode>();
   unary_op->set_op(token);
   unary_op->set_operand(std::move(expr));
-  return std::move(unary_op);
+  return unary_op;
 }
 
 std::unique_ptr<ParseNode> Parser::List(const Token& node) {
@@ -521,7 +521,7 @@
   binary_op->set_op(token);
   binary_op->set_left(std::move(left));
   binary_op->set_right(std::move(right));
-  return std::move(binary_op);
+  return binary_op;
 }
 
 std::unique_ptr<ParseNode> Parser::IdentifierOrCall(
@@ -562,7 +562,7 @@
   func_call->set_args(std::move(list));
   if (block)
     func_call->set_block(std::move(block));
-  return std::move(func_call);
+  return func_call;
 }
 
 std::unique_ptr<ParseNode> Parser::Assignment(std::unique_ptr<ParseNode> left,
@@ -583,7 +583,7 @@
   assign->set_op(token);
   assign->set_left(std::move(left));
   assign->set_right(std::move(value));
-  return std::move(assign);
+  return assign;
 }
 
 std::unique_ptr<ParseNode> Parser::Subscript(std::unique_ptr<ParseNode> left,
@@ -603,7 +603,7 @@
   std::unique_ptr<AccessorNode> accessor = std::make_unique<AccessorNode>();
   accessor->set_base(left->AsIdentifier()->value());
   accessor->set_subscript(std::move(value));
-  return std::move(accessor);
+  return accessor;
 }
 
 std::unique_ptr<ParseNode> Parser::DotOperator(std::unique_ptr<ParseNode> left,
@@ -629,7 +629,7 @@
   accessor->set_base(left->AsIdentifier()->value());
   accessor->set_member(std::unique_ptr<IdentifierNode>(
       static_cast<IdentifierNode*>(right.release())));
-  return std::move(accessor);
+  return accessor;
 }
 
 // Does not Consume the start or end token.
@@ -699,7 +699,7 @@
   // ignorant of them.
   AssignComments(file.get());
 
-  return std::move(file);
+  return file;
 }
 
 std::unique_ptr<ParseNode> Parser::ParseStatement() {
@@ -769,7 +769,7 @@
   }
   if (has_error())
     return std::unique_ptr<ParseNode>();
-  return std::move(condition);
+  return condition;
 }
 
 void Parser::TraverseOrder(const ParseNode* root,
diff --git a/src/gn/pointer_set.h b/src/gn/pointer_set.h
index b690ace..6dc18b4 100644
--- a/src/gn/pointer_set.h
+++ b/src/gn/pointer_set.h
@@ -63,7 +63,7 @@
   PointerSet() = default;
 
   // Allow copying pointer sets.
-  PointerSet(const PointerSet& other) { insert(other); }
+  PointerSet(const PointerSet& other) : BaseType() { insert(other); }
   PointerSet& operator=(const PointerSet& other) {
     if (this != &other) {
       this->~PointerSet();
diff --git a/src/gn/target.cc b/src/gn/target.cc
index ded575a..508ad7e 100644
--- a/src/gn/target.cc
+++ b/src/gn/target.cc
@@ -996,7 +996,7 @@
           SubstitutionWriter::ApplyListToLinkerAsOutputFile(
               this, tool, tool->runtime_outputs(), &runtime_outputs_);
         }
-      } else if (const RustTool* rstool = tool->AsRust()) {
+      } else if (tool->AsRust()) {
         // Default behavior, use the first output file for both.
         link_output_file_ = dependency_output_file_ =
             SubstitutionWriter::ApplyPatternToLinkerAsOutputFile(
diff --git a/src/gn/visibility.cc b/src/gn/visibility.cc
index 8fb5e7f..0878990 100644
--- a/src/gn/visibility.cc
+++ b/src/gn/visibility.cc
@@ -84,7 +84,7 @@
   auto res = std::make_unique<base::ListValue>();
   for (const auto& pattern : patterns_)
     res->AppendString(pattern.Describe());
-  return std::move(res);
+  return res;
 }
 
 // static
