diff --git a/core/fpdfapi/font/cpdf_cmapparser.cpp b/core/fpdfapi/font/cpdf_cmapparser.cpp
index 08336eb..a16d008 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.cpp
+++ b/core/fpdfapi/font/cpdf_cmapparser.cpp
@@ -111,7 +111,7 @@
       size_t nSegs = code_ranges.size() + m_PendingRanges.size();
       if (nSegs == 1) {
         const auto& first_range =
-            code_ranges.size() > 0 ? code_ranges[0] : m_PendingRanges[0];
+            !code_ranges.empty() ? code_ranges[0] : m_PendingRanges[0];
         m_pCMap->SetCodingScheme((first_range.m_CharSize == 2)
                                      ? CPDF_CMap::TwoBytes
                                      : CPDF_CMap::OneByte);
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index 77c427c..3a9a16d 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -1327,7 +1327,6 @@
       }
     }
   }
-  return;
 }
 
 // static
diff --git a/core/fxcodec/codec/jbig2module.cpp b/core/fxcodec/codec/jbig2module.cpp
index c37b0bf..bf47288 100644
--- a/core/fxcodec/codec/jbig2module.cpp
+++ b/core/fxcodec/codec/jbig2module.cpp
@@ -14,7 +14,7 @@
 
 JBig2_DocumentContext* GetJBig2DocumentContext(
     std::unique_ptr<JBig2_DocumentContext>* pContextHolder) {
-  if (!pContextHolder->get())
+  if (!*pContextHolder)
     *pContextHolder = pdfium::MakeUnique<JBig2_DocumentContext>();
   return pContextHolder->get();
 }
diff --git a/core/fxcodec/jbig2/JBig2_Context.cpp b/core/fxcodec/jbig2/JBig2_Context.cpp
index 1dcaeb4..7dc455e 100644
--- a/core/fxcodec/jbig2/JBig2_Context.cpp
+++ b/core/fxcodec/jbig2/JBig2_Context.cpp
@@ -426,7 +426,7 @@
       CJBig2_Segment* pSeg =
           FindSegmentByNumber(pSegment->m_Referred_to_segment_numbers[i]);
       if (pSeg->m_cFlags.s.type == 0) {
-        const CJBig2_SymbolDict& dict = *pSeg->m_SymbolDict.get();
+        const CJBig2_SymbolDict& dict = *pSeg->m_SymbolDict;
         for (size_t j = 0; j < dict.NumImages(); ++j)
           SDINSYMS.get()[dwTemp + j] = dict.GetImage(j);
         dwTemp += dict.NumImages();
@@ -640,7 +640,7 @@
       CJBig2_Segment* pSeg =
           FindSegmentByNumber(pSegment->m_Referred_to_segment_numbers[i]);
       if (pSeg->m_cFlags.s.type == 0) {
-        const CJBig2_SymbolDict& dict = *pSeg->m_SymbolDict.get();
+        const CJBig2_SymbolDict& dict = *pSeg->m_SymbolDict;
         for (size_t j = 0; j < dict.NumImages(); ++j)
           SBSYMS.get()[dwTemp + j] = dict.GetImage(j);
         dwTemp += dict.NumImages();
diff --git a/core/fxcrt/retain_ptr.h b/core/fxcrt/retain_ptr.h
index 683ea74..b7cc11b 100644
--- a/core/fxcrt/retain_ptr.h
+++ b/core/fxcrt/retain_ptr.h
@@ -88,7 +88,7 @@
   }
 
   explicit operator bool() const { return !!m_pObj; }
-  T& operator*() const { return *m_pObj.get(); }
+  T& operator*() const { return *m_pObj; }
   T* operator->() const { return m_pObj.get(); }
 
  private:
diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h
index 90022c8..32f25cc 100644
--- a/core/fxcrt/string_view_template.h
+++ b/core/fxcrt/string_view_template.h
@@ -74,7 +74,7 @@
 
   // Any changes to |vec| invalidate the string.
   explicit StringViewTemplate(const std::vector<UnsignedType>& vec) noexcept
-      : m_Span(vec.size() ? vec.data() : nullptr, vec.size()) {}
+      : m_Span(!vec.empty() ? vec.data() : nullptr, vec.size()) {}
 
   StringViewTemplate& operator=(const CharType* src) {
     m_Span = pdfium::span<const UnsignedType>(
@@ -147,7 +147,7 @@
   }
 
   uint32_t GetID() const {
-    if (m_Span.size() == 0)
+    if (m_Span.empty())
       return 0;
 
     uint32_t strid = 0;
@@ -177,9 +177,9 @@
     return m_Span[index];
   }
 
-  UnsignedType First() const { return m_Span.size() ? m_Span[0] : 0; }
+  UnsignedType First() const { return !m_Span.empty() ? m_Span[0] : 0; }
   UnsignedType Last() const {
-    return m_Span.size() ? m_Span[m_Span.size() - 1] : 0;
+    return !m_Span.empty() ? m_Span[m_Span.size() - 1] : 0;
   }
 
   const CharType CharAt(const size_t index) const {
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 63504b0..fde42bb 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -589,7 +589,6 @@
       dest_scan++;
       *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan[col]);
       dest_scan += Bpp - 2;
-      continue;
     }
     return;
   }
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index 1accd6e..b2e073d 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -550,7 +550,6 @@
       fprintf(stderr, "Unknown error %ld", err);
   }
   fprintf(stderr, ".\n");
-  return;
 }
 
 FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* avail, size_t offset, size_t size) {
