https://github.com/srimanreddy4 updated 
https://github.com/llvm/llvm-project/pull/173213

>From 99657df10ef9cd4f5ec8f9e95706661b6e750d1e Mon Sep 17 00:00:00 2001
From: srimanreddy4 <[email protected]>
Date: Mon, 22 Dec 2025 10:14:48 +0530
Subject: [PATCH] [Clang] Fix crash in EnumDecl::getValueRange with large
 __int128 constants

Fixes #173182. Prevents an assertion failure in APInt when shifting by the full 
bit width during enum range calculation.
---
 clang/lib/AST/Decl.cpp          |  7 +++++--
 clang/test/SemaCXX/pr173182.cpp | 13 +++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/SemaCXX/pr173182.cpp

diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index b12f042646bbb..82cec455895a3 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -5129,8 +5129,11 @@ void EnumDecl::getValueRange(llvm::APInt &Max, 
llvm::APInt &Min) const {
     unsigned NumBits = std::max(NumNegativeBits, NumPositiveBits + 1);
     Max = llvm::APInt(Bitwidth, 1) << (NumBits - 1);
     Min = -Max;
-  } else {
-    Max = llvm::APInt(Bitwidth, 1) << NumPositiveBits;
+ } else {
+    if (NumPositiveBits >= Bitwidth)
+      Max = llvm::APInt::getZero(Bitwidth);
+    else
+      Max = llvm::APInt(Bitwidth, 1) << NumPositiveBits;
     Min = llvm::APInt::getZero(Bitwidth);
   }
 }
diff --git a/clang/test/SemaCXX/pr173182.cpp b/clang/test/SemaCXX/pr173182.cpp
new file mode 100644
index 0000000000000..0c668e1b4d57a
--- /dev/null
+++ b/clang/test/SemaCXX/pr173182.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-unknown-linux-gnu %s
+
+enum E1 {
+  V1 = (__int128)0x1000000000000000
+};
+
+enum E2 { // expected-warning {{enumeration values exceed range of largest 
integer}}
+  V2 = ((__int128)0x1000000000000000 << 64) + 1
+};
+
+__int128 get_val() {
+  return (enum E2)__int128(V2 >> 4);
+}
\ No newline at end of file

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

Reply via email to