diff --git a/include/stdplus/net/addr/subnet.hpp b/include/stdplus/net/addr/subnet.hpp
index 862237b..e9a174c 100644
--- a/include/stdplus/net/addr/subnet.hpp
+++ b/include/stdplus/net/addr/subnet.hpp
@@ -13,10 +13,11 @@
 __attribute__((no_sanitize("undefined"))) constexpr uint32_t
     addr32Mask(std::ptrdiff_t pfx) noexcept
 {
+    // NOLINTNEXTLINE(clang-analyzer-core.UndefinedBinaryOperatorResult)
+    auto v = ~uint32_t{0} << (32 - pfx);
     // Positive prefix check + mask to handle UB when the left shift becomes
     // more than 31 bits
-    return hton(static_cast<uint32_t>(-int32_t{pfx > 0}) & ~uint32_t{0}
-                                                               << (32 - pfx));
+    return hton(static_cast<uint32_t>(-int32_t{pfx > 0}) & v);
 }
 
 constexpr In4Addr addrToSubnet(In4Addr a, std::size_t pfx) noexcept
diff --git a/include/stdplus/raw.hpp b/include/stdplus/raw.hpp
index dbec33e..21dc728 100644
--- a/include/stdplus/raw.hpp
+++ b/include/stdplus/raw.hpp
@@ -172,7 +172,7 @@
     Tp& ret = refFrom<Tp, A>(data);
     static_assert(sizeof(Tp) % sizeof(IntT) == 0);
     data = data.subspan(sizeof(Tp) / sizeof(IntT));
-    return ret;
+    return ret; // NOLINT(clang-analyzer-cplusplus.InnerPointer)
 }
 
 /** @brief Returns the std::span referencing the data of the raw trivial type
diff --git a/test/handle/copyable.cpp b/test/handle/copyable.cpp
index 161b808..fa95419 100644
--- a/test/handle/copyable.cpp
+++ b/test/handle/copyable.cpp
@@ -262,6 +262,7 @@
         StoreHandle h2(std::move(h1));
         EXPECT_TRUE(dropped.empty());
         EXPECT_FALSE(h1);
+        // NOLINTNEXTLINE(clang-analyzer-cplusplus.Move)
         EXPECT_THROW(h1.value(), std::bad_optional_access);
         EXPECT_TRUE(h2);
         EXPECT_EQ(expected, *h2);
@@ -285,6 +286,7 @@
         EXPECT_EQ(std::vector{expected2}, dropped);
         dropped.clear();
         EXPECT_FALSE(h1);
+        // NOLINTNEXTLINE(clang-analyzer-cplusplus.Move)
         EXPECT_THROW(h1.value(), std::bad_optional_access);
         EXPECT_TRUE(h2);
         EXPECT_EQ(expected, *h2);
diff --git a/test/handle/managed.cpp b/test/handle/managed.cpp
index 74816e5..0cdbe74 100644
--- a/test/handle/managed.cpp
+++ b/test/handle/managed.cpp
@@ -217,6 +217,7 @@
         StoreHandle h2(std::move(h1));
         EXPECT_TRUE(dropped.empty());
         EXPECT_FALSE(h1);
+        // NOLINTNEXTLINE(clang-analyzer-cplusplus.Move)
         EXPECT_THROW(h1.value(), std::bad_optional_access);
         EXPECT_TRUE(h2);
         EXPECT_EQ(expected, *h2);
@@ -240,6 +241,7 @@
         EXPECT_EQ(std::vector{expected2}, dropped);
         dropped.clear();
         EXPECT_FALSE(h1);
+        // NOLINTNEXTLINE(clang-analyzer-cplusplus.Move)
         EXPECT_THROW(h1.value(), std::bad_optional_access);
         EXPECT_TRUE(h2);
         EXPECT_EQ(expected, *h2);
diff --git a/test/pinned.cpp b/test/pinned.cpp
index dd83375..88c9bef 100644
--- a/test/pinned.cpp
+++ b/test/pinned.cpp
@@ -39,6 +39,7 @@
 TEST(Pinned, Fundamental)
 {
     Pinned pi = 4;
+    // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
     EXPECT_EQ(4, [](int& f) { return f; }(pi));
     EXPECT_EQ(4, [](int f) { return f; }(pi));
 }
