[clang] [clang][bytecode] Avoid classifying struct fields in `Pointer::toRValue` (PR #185903)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 11 08:31:53 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
We already did that when creating the fields. Look at the `PrimType` saved in the `Descriptor` instead.
---
Full diff: https://github.com/llvm/llvm-project/pull/185903.diff
1 Files Affected:
- (modified) clang/lib/AST/ByteCode/Pointer.cpp (+8-7)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Pointer.cpp b/clang/lib/AST/ByteCode/Pointer.cpp
index f4352e7edf5f8..30e73c6a93c62 100644
--- a/clang/lib/AST/ByteCode/Pointer.cpp
+++ b/clang/lib/AST/ByteCode/Pointer.cpp
@@ -838,27 +838,28 @@ std::optional<APValue> Pointer::toRValue(const Context &Ctx,
R = APValue(APValue::UninitStruct(), NB, NF);
- for (unsigned I = 0; I < NF; ++I) {
+ for (unsigned I = 0; I != NF; ++I) {
const Record::Field *FD = Record->getField(I);
- QualType FieldTy = FD->Decl->getType();
+ const Descriptor *Desc = FD->Desc;
const Pointer &FP = Ptr.atField(FD->Offset);
APValue &Value = R.getStructField(I);
-
- if (OptPrimType T = Ctx.classify(FieldTy)) {
- TYPE_SWITCH(*T, Value = FP.deref<T>().toAPValue(ASTCtx));
+ if (Desc->isPrimitive()) {
+ TYPE_SWITCH(Desc->getPrimType(),
+ Value = FP.deref<T>().toAPValue(ASTCtx));
} else {
+ QualType FieldTy = FD->Decl->getType();
Ok &= Composite(FieldTy, FP, Value);
}
}
- for (unsigned I = 0; I < NB; ++I) {
+ for (unsigned I = 0; I != NB; ++I) {
const Record::Base *BD = Record->getBase(I);
QualType BaseTy = Ctx.getASTContext().getCanonicalTagType(BD->Decl);
const Pointer &BP = Ptr.atField(BD->Offset);
Ok &= Composite(BaseTy, BP, R.getStructBase(I));
}
- for (unsigned I = 0; I < NV; ++I) {
+ for (unsigned I = 0; I != NV; ++I) {
const Record::Base *VD = Record->getVirtualBase(I);
QualType VirtBaseTy =
Ctx.getASTContext().getCanonicalTagType(VD->Decl);
``````````
</details>
https://github.com/llvm/llvm-project/pull/185903
More information about the cfe-commits
mailing list