[clang] 894a387 - [clang][Interp][NFC] Properly implement IntegralAP::from(IntegralAP)

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 16 23:04:41 PST 2023


Author: Timm Bäder
Date: 2023-11-17T08:04:30+01:00
New Revision: 894a38753e8c4cfef7a1dae17a76b405208b2708

URL: https://github.com/llvm/llvm-project/commit/894a38753e8c4cfef7a1dae17a76b405208b2708
DIFF: https://github.com/llvm/llvm-project/commit/894a38753e8c4cfef7a1dae17a76b405208b2708.diff

LOG: [clang][Interp][NFC] Properly implement IntegralAP::from(IntegralAP)

This used to just pass on the given parameter, but we need to respect
the given bit width.

Added: 
    

Modified: 
    clang/lib/AST/Interp/IntegralAP.h

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/IntegralAP.h b/clang/lib/AST/Interp/IntegralAP.h
index bd665959cf3dcc4..9019f32e6cef2a3 100644
--- a/clang/lib/AST/Interp/IntegralAP.h
+++ b/clang/lib/AST/Interp/IntegralAP.h
@@ -102,7 +102,12 @@ template <bool Signed> class IntegralAP final {
 
   template <bool InputSigned>
   static IntegralAP from(IntegralAP<InputSigned> V, unsigned NumBits = 0) {
-    return IntegralAP<Signed>(V.V);
+    if (NumBits == 0)
+      NumBits = V.bitWidth();
+
+    if constexpr (InputSigned)
+      return IntegralAP<Signed>(V.V.sextOrTrunc(NumBits));
+    return IntegralAP<Signed>(V.V.zextOrTrunc(NumBits));
   }
 
   template <unsigned Bits, bool InputSigned>


        


More information about the cfe-commits mailing list