diff --git a/verible/common/formatting/align.cc b/verible/common/formatting/align.cc
index 6f69ef3..eb1c354 100644
--- a/verible/common/formatting/align.cc
+++ b/verible/common/formatting/align.cc
@@ -1083,7 +1083,7 @@
   for (const auto &row : values) {
     for (const int delta : row) {
       // Only accumulate positive values.
-      if (delta > result) result = delta;
+      result = std::max(delta, result);
     }
   }
   return result;
diff --git a/verible/common/formatting/layout-optimizer.cc b/verible/common/formatting/layout-optimizer.cc
index 9428077..1459687 100644
--- a/verible/common/formatting/layout-optimizer.cc
+++ b/verible/common/formatting/layout-optimizer.cc
@@ -402,7 +402,7 @@
         if ((segment_it + 1).IsEnd()) continue;
         const int column = (segment_it + 1)->column;
         CHECK_GE(column, current_column);
-        if (column < next_column) next_column = column;
+        next_column = std::min(column, next_column);
       }
       current_column = next_column;
     }
@@ -434,7 +434,7 @@
 
       const int column =
           (segment_it + 1).IsEnd() ? kInfinity : segment_it[1].column;
-      if (column < next_knot) next_knot = column;
+      next_knot = std::min(column, next_knot);
     }
 
     do {
diff --git a/verible/common/lsp/lsp-text-buffer.cc b/verible/common/lsp/lsp-text-buffer.cc
index 9cf7b80..27e4cf4 100644
--- a/verible/common/lsp/lsp-text-buffer.cc
+++ b/verible/common/lsp/lsp-text-buffer.cc
@@ -14,6 +14,7 @@
 
 #include "verible/common/lsp/lsp-text-buffer.h"
 
+#include <algorithm>
 #include <numeric>
 #include <string>
 #include <string_view>
@@ -86,7 +87,7 @@
   if (!str->empty() && str->back() == '\n') --str_end;
 
   if (c.range.start.character > str_end) return false;
-  if (end_char > str_end) end_char = str_end;
+  end_char = std::min(end_char, str_end);
   if (end_char < c.range.start.character) return false;
 
   document_length_ -= str->length();
diff --git a/verible/verilog/formatting/token-annotator.cc b/verible/verilog/formatting/token-annotator.cc
index 7a4a063..7a33214 100644
--- a/verible/verilog/formatting/token-annotator.cc
+++ b/verible/verilog/formatting/token-annotator.cc
@@ -240,9 +240,7 @@
       }
 
       int spaces = right.OriginalLeadingSpaces().length();
-      if (spaces > 1) {
-        spaces = 1;
-      }
+      spaces = std::min(spaces, 1);
       return {spaces, "Limit <= 1 space before binary operator inside []."};
     }
     if (left.format_token_enum == FormatTokenType::binary_operator &&
diff --git a/verible/verilog/tools/ls/autoexpand.cc b/verible/verilog/tools/ls/autoexpand.cc
index c1ab6b3..c2683e2 100644
--- a/verible/verilog/tools/ls/autoexpand.cc
+++ b/verible/verilog/tools/ls/autoexpand.cc
@@ -548,10 +548,8 @@
 template <>
 Dimension MaxDimension(const DimensionRange first,
                        const DimensionRange second) {
-  int64_t max = std::max(std::max(first.msb, first.lsb),
-                         std::max(second.msb, second.lsb));
-  int64_t min = std::min(std::min(first.msb, first.lsb),
-                         std::min(second.msb, second.lsb));
+  int64_t max = std::max({first.msb, first.lsb, second.msb, second.lsb});
+  int64_t min = std::min({first.msb, first.lsb, second.msb, second.lsb});
   if (first.msb >= first.lsb) {
     return DimensionRange{.msb = max, .lsb = min};
   }
