diff --git a/build/gen.py b/build/gen.py
index 2d89af4..abe019c 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -439,7 +439,11 @@
         '-Wall',
         '-Wextra',
         '-Wno-unused-parameter',
+
+        '-Wextra-semi',
+        '-Wextra-semi-stmt',
         '-Wundef',
+
         '-std=c++17'
     ])
 
diff --git a/src/base/numerics/clamped_math.h b/src/base/numerics/clamped_math.h
index 9e83543..88e0e3a 100644
--- a/src/base/numerics/clamped_math.h
+++ b/src/base/numerics/clamped_math.h
@@ -233,12 +233,12 @@
 BASE_NUMERIC_ARITHMETIC_OPERATORS(Clamped, Clamp, Xor, ^, ^=)
 BASE_NUMERIC_ARITHMETIC_VARIADIC(Clamped, Clamp, Max)
 BASE_NUMERIC_ARITHMETIC_VARIADIC(Clamped, Clamp, Min)
-BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsLess, <);
-BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsLessOrEqual, <=);
-BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsGreater, >);
-BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsGreaterOrEqual, >=);
-BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsEqual, ==);
-BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsNotEqual, !=);
+BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsLess, <)
+BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsLessOrEqual, <=)
+BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsGreater, >)
+BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsGreaterOrEqual, >=)
+BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsEqual, ==)
+BASE_NUMERIC_COMPARISON_OPERATORS(Clamped, IsNotEqual, !=)
 
 }  // namespace internal
 
diff --git a/src/base/numerics/safe_conversions.h b/src/base/numerics/safe_conversions.h
index 35c4089..32fb5a9 100644
--- a/src/base/numerics/safe_conversions.h
+++ b/src/base/numerics/safe_conversions.h
@@ -310,14 +310,14 @@
                        typename UnderlyingType<R>::type>(lhs, rhs);     \
   }
 
-BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsLess, <);
-BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsLessOrEqual, <=);
-BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsGreater, >);
-BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsGreaterOrEqual, >=);
-BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsEqual, ==);
-BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsNotEqual, !=);
+BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsLess, <)
+BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsLessOrEqual, <=)
+BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsGreater, >)
+BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsGreaterOrEqual, >=)
+BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsEqual, ==)
+BASE_NUMERIC_COMPARISON_OPERATORS(Strict, IsNotEqual, !=)
 
-};  // namespace internal
+}  // namespace internal
 
 using internal::as_signed;
 using internal::as_unsigned;
diff --git a/src/gn/analyzer.cc b/src/gn/analyzer.cc
index e15c265..b1be618 100644
--- a/src/gn/analyzer.cc
+++ b/src/gn/analyzer.cc
@@ -89,7 +89,7 @@
                  const std::string& key,
                  const std::string& value) {
   dict.SetKey(key, base::Value(value));
-};
+}
 
 void WriteLabels(const Label& default_toolchain,
                  base::DictionaryValue& dict,
diff --git a/src/gn/command_format.cc b/src/gn/command_format.cc
index a3fda21..6118fa4 100644
--- a/src/gn/command_format.cc
+++ b/src/gn/command_format.cc
@@ -519,7 +519,7 @@
 
 #define RETURN_IF_SET(x)             \
   if (int result = (x); result >= 0) \
-    return result;
+    return result
 
   if (const AccessorNode* accessor = node->AsAccessor()) {
     RETURN_IF_SET(SuffixCommentTreeWalk(accessor->subscript()));
@@ -559,7 +559,7 @@
   }
 
   return -1;
-};
+}
 
 // If there are suffix comments on the first node or its children, they might
 // carry down multiple lines. Otherwise, use the node's normal end range. This
diff --git a/src/gn/compile_commands_writer.cc b/src/gn/compile_commands_writer.cc
index c65d378..a2ee3a0 100644
--- a/src/gn/compile_commands_writer.cc
+++ b/src/gn/compile_commands_writer.cc
@@ -66,7 +66,7 @@
   RecursiveTargetConfigToStream<T>(config, target, getter, writer, out);
   base::EscapeJSONString(out.str(), false, &result);
   return result;
-};
+}
 
 void SetupCompileFlags(const Target* target,
                        PathOutput& path_output,
diff --git a/src/gn/immutable_vector.h b/src/gn/immutable_vector.h
index 306819b..0897bec 100644
--- a/src/gn/immutable_vector.h
+++ b/src/gn/immutable_vector.h
@@ -40,7 +40,7 @@
   const T* data() const { return begin(); }
   size_t size() const { return header_ ? header_->size : 0u; }
   bool empty() const { return size() == 0; }
-  const T& operator[](size_t offset) const { return begin()[offset]; };
+  const T& operator[](size_t offset) const { return begin()[offset]; }
 
   const T* begin() const { return header_ ? &header_->item0 : nullptr; }
   const T* end() const {
diff --git a/src/gn/json_project_writer.cc b/src/gn/json_project_writer.cc
index ba23749..27368ff 100644
--- a/src/gn/json_project_writer.cc
+++ b/src/gn/json_project_writer.cc
@@ -313,7 +313,6 @@
 
         if (line_end == std::string_view::npos) {
           out_ << json;
-          ;
           comma_ = {};
           return;
         }
diff --git a/src/gn/parse_tree.cc b/src/gn/parse_tree.cc
index e9ca8fa..28d5313 100644
--- a/src/gn/parse_tree.cc
+++ b/src/gn/parse_tree.cc
@@ -258,10 +258,12 @@
 std::unique_ptr<ParseNode> ParseNode::BuildFromJSON(const base::Value& value) {
   const std::string& str_type = value.FindKey(kJsonNodeType)->GetString();
 
-#define RETURN_IF_MATCHES_NAME(t)     \
-  if (str_type == t::kDumpNodeName) { \
-    return t::NewFromJSON(value);     \
-  }
+#define RETURN_IF_MATCHES_NAME(t)               \
+  do {                                          \
+    if (str_type == t::kDumpNodeName) {         \
+      return t::NewFromJSON(value);             \
+    }                                           \
+  } while(0)
 
   RETURN_IF_MATCHES_NAME(AccessorNode);
   RETURN_IF_MATCHES_NAME(BinaryOpNode);
@@ -332,7 +334,8 @@
   const base::Value* child = value.FindKey(kJsonNodeChild); \
   if (!child || !child->is_list()) {                        \
     return nullptr;                                         \
-  }
+  }                                                         \
+  (void)(0) // this is to supress extra semicolon warning.
 
 // static
 std::unique_ptr<AccessorNode> AccessorNode::NewFromJSON(
diff --git a/src/gn/rust_project_writer_helpers.h b/src/gn/rust_project_writer_helpers.h
index 4ccf568..9aa7eba 100644
--- a/src/gn/rust_project_writer_helpers.h
+++ b/src/gn/rust_project_writer_helpers.h
@@ -78,7 +78,7 @@
   std::optional<OutputFile>& gen_dir() { return gen_dir_; }
 
   // Returns the crate index.
-  CrateIndex index() { return index_; };
+  CrateIndex index() { return index_; }
 
   // Returns the displayable crate label.
   const std::string& label() { return label_; }
diff --git a/src/gn/string_atom.h b/src/gn/string_atom.h
index c590e0b..51aa8d5 100644
--- a/src/gn/string_atom.h
+++ b/src/gn/string_atom.h
@@ -171,7 +171,7 @@
   template <typename U>
   bool operator()(const U& a, const StringAtom& b) const noexcept {
     return a < b.str();
-  };
+  }
 };
 
 template <>
