https://github.com/Devanshi-cmd created 
https://github.com/llvm/llvm-project/pull/178225

Replace instances of -1ULL with std::numeric_limits<uint64_t>::max() in CIR 
Itanium C++ ABI implementations to address C4146 compiler warning.

This change improves code clarity and eliminates MSVC warning C4146 (unary 
minus operator applied to unsigned type) in the experimental Clang IR (CIR) 
implementations.

Files changed:
- clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
- clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp

Fixes part of #147439

>From b35bb1ad82e5cd5fb1844ca62435c3d832b91da5 Mon Sep 17 00:00:00 2001
From: Devanshi-cmd <[email protected]>
Date: Tue, 27 Jan 2026 20:33:57 +0530
Subject: [PATCH] [Clang][CIR] Replace -1ULL with std::numeric_limits in
 Itanium CXXABI

Replace instances of -1ULL with std::numeric_limits<uint64_t>::max()
in CIR Itanium C++ ABI implementations to address C4146 compiler warning.

This change improves code clarity and eliminates MSVC warning C4146
(unary minus operator applied to unsigned type) in the experimental
Clang IR (CIR) implementations.

Files changed:
- clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
- clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp

Fixes part of #147439
---
 clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp                 | 4 +++-
 .../Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp  | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp 
b/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
index 26465a804f1e6..e61e0390ee86d 100644
--- a/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenItaniumCXXABI.cpp
@@ -26,6 +26,8 @@
 #include "clang/CIR/MissingFeatures.h"
 #include "llvm/Support/ErrorHandling.h"
 
+#include <limits>
+
 using namespace clang;
 using namespace clang::CIRGen;
 
@@ -1939,7 +1941,7 @@ static CharUnits computeOffsetHint(ASTContext &astContext,
       // If the path contains a virtual base class we can't give any hint.
       // -1: no hint.
       if (pathElement.Base->isVirtual())
-        return CharUnits::fromQuantity(-1ULL);
+        return CharUnits::fromQuantity( std::numeric_limits<uint64_t>::max());
 
       if (numPublicPaths > 1) // Won't use offsets, skip computation.
         continue;
diff --git 
a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp 
b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp
index 10996e6b5fe29..c9d59539d55d6 100644
--- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp
+++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp
@@ -26,6 +26,8 @@
 #include "mlir/IR/ImplicitLocOpBuilder.h"
 #include "llvm/Support/ErrorHandling.h"
 
+#include <limits>
+
 namespace cir {
 
 namespace {
@@ -170,7 +172,7 @@ mlir::TypedAttr LowerItaniumCXXABI::lowerDataMemberConstant(
   if (attr.isNullPtr()) {
     // Itanium C++ ABI 2.3:
     //   A NULL pointer is represented as -1.
-    memberOffset = -1ull;
+    memberOffset = std::numeric_limits<uint64_t>::max();
   } else {
     // Itanium C++ ABI 2.3:
     //   A pointer to data member is an offset from the base address of

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to