[clang] [clang][bytecode] Use field descriptor in IntPointer::atOffset (PR #109238)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 18 22:56:52 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
We're otherwise still pointing to the old type, but with the new offset.
---
Full diff: https://github.com/llvm/llvm-project/pull/109238.diff
2 Files Affected:
- (modified) clang/lib/AST/ByteCode/Pointer.cpp (+1-1)
- (modified) clang/test/AST/ByteCode/codegen.c (+7)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Pointer.cpp b/clang/lib/AST/ByteCode/Pointer.cpp
index 282953eb991a6b..387cad9b137c02 100644
--- a/clang/lib/AST/ByteCode/Pointer.cpp
+++ b/clang/lib/AST/ByteCode/Pointer.cpp
@@ -665,7 +665,7 @@ IntPointer IntPointer::atOffset(const ASTContext &ASTCtx,
uint64_t FieldOffset =
ASTCtx.toCharUnitsFromBits(Layout.getFieldOffset(FieldIndex))
.getQuantity();
- return IntPointer{this->Desc, this->Value + FieldOffset};
+ return IntPointer{F->Desc, this->Value + FieldOffset};
}
IntPointer IntPointer::baseCast(const ASTContext &ASTCtx,
diff --git a/clang/test/AST/ByteCode/codegen.c b/clang/test/AST/ByteCode/codegen.c
index 8434992823010e..3c6f17e2b87264 100644
--- a/clang/test/AST/ByteCode/codegen.c
+++ b/clang/test/AST/ByteCode/codegen.c
@@ -17,3 +17,10 @@ struct B {
};
const int A = (char *)(&( (struct B *)(16) )->b[0]) - (char *)(16);
// CHECK: @A = constant i32 1
+
+struct X { int a[2]; };
+int test(void) {
+ static int i23 = (int) &(((struct X *)0)->a[1]);
+ return i23;
+}
+// CHECK: @test.i23 = internal global i32 4, align 4
``````````
</details>
https://github.com/llvm/llvm-project/pull/109238
More information about the cfe-commits
mailing list