[clang] [clang][bytecode] Emit embed element casts directly (PR #152928)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 10 09:34:07 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
The element initializer is known to be an IntegerLiteral, the previous signature of the lambda just didn't specify that. So we can also do the cast directly instead of doing it via a Cast op.
---
Full diff: https://github.com/llvm/llvm-project/pull/152928.diff
1 Files Affected:
- (modified) clang/lib/AST/ByteCode/Compiler.cpp (+3-8)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Compiler.cpp b/clang/lib/AST/ByteCode/Compiler.cpp
index 5275b86a57a47..8e651cf060620 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -1932,15 +1932,10 @@ bool Compiler<Emitter>::visitInitList(ArrayRef<const Expr *> Inits,
dyn_cast<EmbedExpr>(Init->IgnoreParenImpCasts())) {
PrimType TargetT = classifyPrim(Init->getType());
- auto Eval = [&](const Expr *Init, unsigned ElemIndex) {
- PrimType InitT = classifyPrim(Init->getType());
- if (!this->visit(Init))
+ auto Eval = [&](const IntegerLiteral *IL, unsigned ElemIndex) {
+ if (!this->emitConst(IL->getValue(), Init))
return false;
- if (InitT != TargetT) {
- if (!this->emitCast(InitT, TargetT, E))
- return false;
- }
- return this->emitInitElem(TargetT, ElemIndex, Init);
+ return this->emitInitElem(TargetT, ElemIndex, IL);
};
if (!EmbedS->doForEachDataElement(Eval, ElementIndex))
return false;
``````````
</details>
https://github.com/llvm/llvm-project/pull/152928
More information about the cfe-commits
mailing list