[clang] [clang] Implement -fstrict-bool (PR #160790)

Bruno De Fraine via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 26 15:27:22 PDT 2025


=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/160790 at github.com>


================
@@ -2198,8 +2211,16 @@ llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) {
   }
 
   llvm::Type *ResTy = ConvertType(Ty);
-  if (Ty->hasBooleanRepresentation() || Ty->isBitIntType() ||
-      Ty->isExtVectorBoolType())
+  bool IsBitInt = Ty->isBitIntType();
+  bool HasBoolRep = Ty->hasBooleanRepresentation();
+  if (HasBoolRep && !IsBitInt &&
+      CGM.getCodeGenOpts().getLoadBoolFromMem() ==
+          CodeGenOptions::BoolFromMem::NonZero) {
+    auto *NonZero = Builder.CreateICmpNE(
+        Value, llvm::Constant::getNullValue(Value->getType()), "loadedv.nz");
+    return Builder.CreateIntCast(NonZero, ResTy, false, "loadedv");
----------------
brunodf-snps wrote:

Why is the int cast needed here? The icmp instruction returns i1 or a vector of i1. Since `Ty->hasBoooleanRepresentation` it will also be the case that `ResTy` is i1 or a vector of i1. So there is nothing to cast?

https://github.com/llvm/llvm-project/pull/160790


More information about the cfe-commits mailing list