llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Sangam Paudel (sangam151)

<details>
<summary>Changes</summary>

This patch fixes #<!-- -->219531.

__builtin_bit_cast on an lvalue, such as a vector element access (v.y),
was missing a MaterializeTemporaryExpr in the AST. This caused code
generation to load from the start of the vector instead of the
specified lane.

This patch wraps the operand in a MaterializeTemporaryExpr when it
is an lvalue, ensuring the correct lane is materialized before the
bitcast.

Tested on Windows (x64) with the provided reproducer.

---
Full diff: https://github.com/llvm/llvm-project/pull/219646.diff


1 Files Affected:

- (modified) clang/lib/Sema/SemaCast.cpp (+7) 


``````````diff
diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp
index 133837623a7a6..985a50cf150b0 100644
--- a/clang/lib/Sema/SemaCast.cpp
+++ b/clang/lib/Sema/SemaCast.cpp
@@ -446,6 +446,13 @@ ExprResult Sema::BuildBuiltinBitCastExpr(SourceLocation 
KWLoc,
     Operand = PR.get();
   }
 
+  if (Operand->isLValue()) {
+    Operand = CreateMaterializeTemporaryExpr(Operand->getType(), Operand,
+                                             /*BoundToLvalue=*/false);
+    if (!Operand)
+      return ExprError();
+  }
+
   CastOperation Op(*this, TSI->getType(), Operand);
   Op.OpRange = CastOperation::OpRangeType(KWLoc, KWLoc, RParenLoc);
   TypeLoc TL = TSI->getTypeLoc();

``````````

</details>


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

Reply via email to