[clang] [clang][bytecode] Add init link for the RVO ptr (PR #122904)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 14 06:11:57 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/122904.diff
3 Files Affected:
- (modified) clang/lib/AST/ByteCode/Compiler.cpp (+3)
- (modified) clang/lib/AST/ByteCode/Compiler.h (+3-1)
- (modified) clang/test/AST/ByteCode/cxx11.cpp (+11)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Compiler.cpp b/clang/lib/AST/ByteCode/Compiler.cpp
index 2326480fe2eaf4..a5dfaaf3196559 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -90,6 +90,8 @@ bool InitLink::emit(Compiler<Emitter> *Ctx, const Expr *E) const {
if (!Ctx->emitConstUint32(Offset, E))
return false;
return Ctx->emitArrayElemPtrPopUint32(E);
+ case K_RVO:
+ return Ctx->emitRVOPtr(E);
case K_InitList:
return true;
default:
@@ -4998,6 +5000,7 @@ bool Compiler<Emitter>::visitReturnStmt(const ReturnStmt *RS) {
if (!this->visit(RE))
return false;
} else {
+ InitLinkScope<Emitter> ILS(this, InitLink::RVO());
// RVO - construct the value in the return location.
if (!this->emitRVOPtr(RE))
return false;
diff --git a/clang/lib/AST/ByteCode/Compiler.h b/clang/lib/AST/ByteCode/Compiler.h
index 2d5b76f789543e..f9a597a16ef4ae 100644
--- a/clang/lib/AST/ByteCode/Compiler.h
+++ b/clang/lib/AST/ByteCode/Compiler.h
@@ -51,11 +51,13 @@ struct InitLink {
K_Temp = 2,
K_Decl = 3,
K_Elem = 5,
- K_InitList = 6
+ K_RVO = 6,
+ K_InitList = 7
};
static InitLink This() { return InitLink{K_This}; }
static InitLink InitList() { return InitLink{K_InitList}; }
+ static InitLink RVO() { return InitLink{K_RVO}; }
static InitLink Field(unsigned Offset) {
InitLink IL{K_Field};
IL.Offset = Offset;
diff --git a/clang/test/AST/ByteCode/cxx11.cpp b/clang/test/AST/ByteCode/cxx11.cpp
index 86b58283023bc8..23582e9ab556a8 100644
--- a/clang/test/AST/ByteCode/cxx11.cpp
+++ b/clang/test/AST/ByteCode/cxx11.cpp
@@ -174,3 +174,14 @@ void lambdas() {
int d;
int a9[1] = {[d = 0] = 1}; // both-error {{not an integral constant expression}}
}
+
+
+namespace InitLinkToRVO {
+ struct A {
+ int y = 3;
+ int z = 1 + y;
+ };
+
+ constexpr A make() { return A {}; }
+ static_assert(make().z == 4, "");
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/122904
More information about the cfe-commits
mailing list