Remove misc GCC-related compiler warnings.

When building GN with GCC, several warnings are printed
by the compiler about minor issues. This CL fixes these.

- src/gn/desc_builder.cc, src/gn/parser.cc, src/gn/visibility.cc:
  Remove redundant std::move() in return statements. These are
  harmless, except that they prevent copy-elision optimization
  in the generated code.

- src/gn/target.cc: Remove the unused 'rstool' variable.

- src/gn/pointer_set.h: Call the base default constructor
  explicitly in the PointerSet copy-constructor. Note that
  this is the default compiler behaviour, so this doesn´t
  change the generated code.

- src/base/compiler_specific.h: Update the FALLTHROUGH macro
  definition for C++17, removing a compiler warning in
  src/base/json/json_parser.cc.

Bug: None

Change-Id: I098f5edcf95f82cdfef0161cc637711111a3ff42
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/12820
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: David Turner <digit@google.com>
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