Skip to content

Lifetime extension through a member of a temporary in GNU and Clang modes [GH #90] - #389

Open
Momen-G-Ar wants to merge 2 commits into
edgcpp:mainfrom
Momen-G-Ar:gh-90-lifetime-extension
Open

Momen-G-Ar wants to merge 2 commits into
edgcpp:mainfrom
Momen-G-Ar:gh-90-lifetime-extension

Conversation

@Momen-G-Ar

@Momen-G-Ar Momen-G-Ar commented Oct 25, 2026 •

Copy link
Copy Markdown

Summary

Fixes GH #90 ([GNATS 29059]): in GNU and Clang modes, binding a reference to a member of a class temporary did not extend the temporary's lifetime ([class.temporary]/6).

int d;
struct A { int b; ~A() { ++d; } };
int main() {
  const int &r = A().b;
  assert(d == 0);  // failed with --g++ / --clang: A() already destroyed
}
Mode Before After
strict C++14 and later lifetime extended unchanged
--g++ (GCC 9+), --clang (Clang 4+) r bound to a copy of b, A() destroyed at end of full-expression lifetime extended, as in GCC and Clang
--g++ (GCC < 9), --clang (Clang < 4) copy unchanged (those versions use the C++11 rule)

Root cause

  • Core issue 616. In GNU and Clang modes A().b was still a prvalue (the C++11 rule), so the reference bound to a copy of the member. GCC 9 and Clang 4 implement Core issue 616 (A().b is an xvalue). daveed's fix for EDGcpfe/29032 enabled the rule for those versions in cmd_line.c but was backed out because it regressed Clang's SemaCXX/constant-expression-cxx2a.
  • Why that regressed. That test runs with --clang --clang_version 999999, so with the cmd_line.c change Y(0,0).z1.n takes the xvalue path in the constexpr interpreter. For . and .* on a class prvalue, that path called mark_complete_object_initialized on the prvalue. The shortcut dates from before C++20 (P1331), when a constexpr constructor had to initialize every member; now it need not, so the read of the uninitialized z1.n folded to a garbage value (the final comparison was -48039863565308959547770532813896688677 == 0) instead of being diagnosed. The same bug was already present in strict --c++20 mode (static_assert(W().n == 0); was accepted for struct W { int n; constexpr W() {} };).
  • Removing the shortcut exposed one gap. Value initialization of a class without a user-provided default constructor zero-initializes the object, but the interpreter only cleared the storage without recording the members as initialized. Without fixing that first, removing the shortcut rejects B().y in Clang's dcl.init.general/p16-cxx20 (GH69890).

Commits

  1. Mark the zeroed members of a value-initialized class as initialized (interpret.c): prerequisite for commit 2. Value initialization of a class without a user-provided default constructor now uses init_subobject_to_zero. Classes with a user-provided default constructor are cleared as before but not marked.
  2. Apply Core issue 616 when emulating GCC 9+ and Clang 4+ (cmd_line.c, interpret.c, exprutil.c, il_walk.c): the fix for the issue.
    • cmd_line.c: daveed's change.
    • interpret.c: remove the "fully initialized" marking for . and .* on a class prvalue (eok_dot_field, eok_pm_field), which is what made the change regress.
    • exprutil.c: is_glvalue_for_auto_object and is_address_of_auto_object look through the new xvalue to the class prvalue, so return A().b; from a function returning const int & still warns about returning a reference to a local temporary.
    • il_walk.c: comments only.

Each commit has its own Changes entry in src/pending_changes/ (gh-90-value-init-zeroed-members.txt, gh-90-lifetime-extension-member-of-temporary.txt; both pass edg-collect-changes --check), builds, and passes its tests on its own. Based on main at 35b7c47.

Changes to existing expectations

All are improvements, except that constexpr-delegating3 still fails, now with a different diagnostic.

Commit Test Change
1 gnu cpp2a/constexpr-init18 (fp) FAIL → PASS (value-initialized base is zeroed)
1 clang dcl.init.general/p16-cxx20 (fn) false error on B().x removed (GH69890)
1 clang SemaCXX/constexpr-value-init (fn) false errors on B() and E() (// ok) removed
1 clang class.init/class.inhctor.init/p1 (fn) false error on constexpr Wrap2 b = {}; removed
2 gnu init/ref19 (rp, PR 49528) FAIL → PASS (lifetime extension)
2 clang drs/cwg6xx (fn) Core issue 616 cases no longer rejected
2 clang expr.const/p2-0x (fn) read of a member of a volatile prvalue now diagnosed, as Clang expects
2 clang SemaCXX/cxx2c-placeholder-vars (fn) "expression has no effect" on S{}._ no longer issued in GNU mode, as in strict mode
2 clang SemaCXX/constant-expression-cxx2a (fn) same diagnostics; a note caret moves from .z1 to .n
2 gnu cpp0x/constexpr-delegating3 (fp) still FAIL (delegation to a defaulted constructor, a separate bug); "access to uninitialized object" instead of a garbage value. The 32-bit recordings are deleted, since they are now identical to default.1.1.txt

Version gating

Checked on Compiler Explorer with -std=c++14: A().b is a prvalue in GCC 8.3 and Clang 3.9, and an xvalue in GCC 9.2 and Clang 4.0 and later.

Tests

Test Type Checks
regressions/gh-90.sft.cpp rp lifetime of A().b, A().i[0], A().*pm, A().i: C++14/C++20, strict, g++ 9/15, Clang 4/19
regressions/gh-90-old-modes.sft.cpp fp A().b is still a prvalue when emulating GCC 8.3 and Clang 3.9, just below the version thresholds (fails for GCC 9.0 and Clang 4.0)
regressions/gh-90-warn.sft.cpp fp return-to-temporary warnings kept (strict, g++ 15/8, Clang 19); no false positives
cwg/cwg616.sft.cpp fp Core issue 616 conformance test (fails in g++ 8 / Clang 3.9 emulation)
  • The new tests fail on main and pass with this change, except gh-90-old-modes, which checks behavior that does not change (edg-docker-test, edg_x86_64 and edg_x86_64_cp).
  • The recordings were created with edg-docker-test -W, and the default.* files were reviewed.
  • Full suite on GitHub Actions (Build & Test CI, all four configurations): passes on 4bea665 (run 40175117293), rebased on main 35b7c47. Strict Build Check, Python Typecheck and Pending Changes Entries also pass.

Not in this PR

Found while working on this; to be raised separately:

  • Core issue 1213 (discussion C++: binding a reference to a temporary’s sub-object destroys the temporary too early #288): A().i[0] is an lvalue instead of an xvalue, so const int &r = c ? A().b : A().i[0]; binds to a copy in all modes.
  • Member function call on a class prvalue (eval_selector_arg): the same "fully initialized" marking remains, so static_assert(W().get() == 0); is still accepted in --c++20.
  • Delegation to a defaulted constructor in constant evaluation (constexpr-delegating3).

Closes: #90

Summary by CodeRabbit

  • Bug Fixes
    • Corrected C++14 handling of member access on temporary class objects in supported GNU and Clang modes, including lifetime extension when references bind to their members.
    • Fixed C++20 constant evaluation for value-initialized classes without user-provided default constructors, allowing zero-initialized members to be read when appropriate.
    • Improved detection of uninitialized member reads in constant expressions and warnings for returning references or pointers to temporary members.

edgcpp#90]

Value initialization of a class without a user-provided default
constructor zero-initializes the object before calling the constructor.
The interpreter cleared the storage but did not record the subobjects as
initialized, so reading a member that the constructor does not set was
rejected in a constant expression:

  struct A { constexpr A() {} int x; };
  struct B : A { int y; };
  static_assert(B().x == 0);  // Previously rejected.

The constructor-call setup in interpret.c now uses init_subobject_to_zero
for such classes.  Classes with a user-provided default constructor are
cleared as before, but not marked.

This is needed by the next commit, which stops treating every member of a
class prvalue as initialized; without it, "B().y" above would be rejected
as well (Clang's dcl.init.general/p16-cxx20, GH69890).

Updated expectations: gnu cpp2a/constexpr-init18 now passes; clang
dcl.init.general/p16-cxx20, SemaCXX/constexpr-value-init and
class.inhctor.init/p1 no longer report false errors.
Under Core issue 616, selecting a member of a class prvalue yields an
xvalue, and binding a reference to it extends the lifetime of the whole
temporary.  GNU and Clang modes kept the C++11 rule (a prvalue), so

  const int &r = A().b;

bound to a copy of the member and destroyed A() at the end of the
full-expression.  GCC 9 and Clang 4 implement the issue, so cmd_line.c now
enables selection_from_prvalue_is_xvalue when emulating those versions or
later.  This reapplies the change backed out for EDGcpfe/29032.

That change regressed Clang's SemaCXX/constant-expression-cxx2a because,
for "." and ".*" on a class prvalue, the interpreter marked the whole
prvalue as initialized (eok_dot_field and eok_pm_field in interpret.c).
Since C++20 a constexpr constructor can leave members uninitialized, so
"Y(0,0).z1.n" folded to an indeterminate value instead of being diagnosed.
The marking is removed; the previous commit fixed the one case where the
per-subobject state was incomplete.  The same bug already affected strict
C++20 mode ("static_assert(W().n == 0);" was accepted).

is_glvalue_for_auto_object and is_address_of_auto_object (exprutil.c) now
look through such an xvalue to the class prvalue, so "return A().b;" still
warns about returning a reference to a local temporary.  The
traverse_addressing_subtree comments (il_walk.c) are updated to match.

Tests: regressions/edgcppgh-90 (lifetime, including the GCC 9 and Clang 4
modes), regressions/edgcppgh-90-old-modes ("A().b" is still a prvalue for GCC
8.3 and Clang 3.9), regressions/edgcppgh-90-warn (warnings), cwg/cwg616.  Updated
expectations: gnu init/ref19 now passes; clang drs/cwg6xx no longer
rejects the Core issue 616 cases; clang expr.const/p2-0x now diagnoses a
read of a volatile prvalue's member; clang cxx2c-placeholder-vars loses an
"expression has no effect" warning on "S{}._", as in strict mode; a note
caret moves to the member in SemaCXX/constant-expression-cxx2a; gnu
cpp0x/constexpr-delegating3 (delegation to a defaulted constructor, a
separate bug) still fails, but with "access to uninitialized object"
instead of a garbage value.
@edgcpp-bot

Copy link
Copy Markdown
Collaborator

AcknowlEDG review results updated for 4bea6652d335:

CI other.

@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: aa6c8e6c-fe3c-4691-9879-82183e05153b
Commits

Reviewing files that changed from the base of the PR and between 35b7c47 and 4bea665.

Files ignored due to path filters: 1
  • tests/expectations/edg_x86_64/imported.log is excluded by !**/*.log
Files selected for processing: 68
  • src/cmd_line.c
  • src/exprutil.c
  • src/il_walk.c
  • src/interpret.c
  • src/pending_changes/gh-90-lifetime-extension-member-of-temporary.txt
  • src/pending_changes/gh-90-value-init-zeroed-members.txt
  • tests/tests/cwg/.cwg616.rto/default.1.1.txt
  • tests/tests/cwg/.cwg616.rto/default.2.1.txt
  • tests/tests/cwg/.cwg616.rto/default.3.1.txt
  • tests/tests/cwg/cwg616.sft.cpp
  • tests/tests/imported/clang/cpp/CXX/dcl.decl/dcl.init/dcl.init.general/.p16-cxx20.rto/default.1.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/default.3.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/default.4.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/default.5.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/default.6.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/default.7.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32.3.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32.4.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32.5.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32.6.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32.7.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32_cp.3.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32_cp.4.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32_cp.5.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32_cp.6.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_32_cp.7.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_64_cp.3.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_64_cp.4.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_64_cp.5.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_64_cp.6.1.txt
  • tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/edg_x86_64_cp.7.1.txt
  • tests/tests/imported/clang/cpp/CXX/expr/expr.const/.p2-0x.rto/default.2.1.txt
  • tests/tests/imported/clang/cpp/CXX/expr/expr.const/.p2-0x.rto/edg_x86_32.2.1.txt
  • tests/tests/imported/clang/cpp/CXX/expr/expr.const/.p2-0x.rto/edg_x86_32_cp.2.1.txt
  • tests/tests/imported/clang/cpp/CXX/expr/expr.const/.p2-0x.rto/edg_x86_64_cp.2.1.txt
  • tests/tests/imported/clang/cpp/CXX/special/class.init/class.inhctor.init/.p1.rto/default.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.constant-expression-cxx2a.rto/default.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.constant-expression-cxx2a.rto/edg_x86_32.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.constant-expression-cxx2a.rto/edg_x86_32_cp.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.constant-expression-cxx2a.rto/edg_x86_64_cp.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.constexpr-value-init.rto/default.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.constexpr-value-init.rto/default.2.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.cxx2c-placeholder-vars.rto/default.1.1.txt
  • tests/tests/imported/gnu/cpp/cpp0x/.constexpr-delegating3.rto/default.1.1.txt
  • tests/tests/imported/gnu/cpp/cpp0x/.constexpr-delegating3.rto/edg_x86_32.1.1.txt
  • tests/tests/imported/gnu/cpp/cpp0x/.constexpr-delegating3.rto/edg_x86_32_cp.1.1.txt
  • tests/tests/imported/gnu/cpp/cpp2a/.constexpr-init18.rto/default.1.1.txt
  • tests/tests/regressions/.gh-90-old-modes.rto/default.1.1.txt
  • tests/tests/regressions/.gh-90-old-modes.rto/default.2.1.txt
  • tests/tests/regressions/.gh-90-warn.rto/default.1.1.txt
  • tests/tests/regressions/.gh-90-warn.rto/default.2.1.txt
  • tests/tests/regressions/.gh-90-warn.rto/default.3.1.txt
  • tests/tests/regressions/.gh-90-warn.rto/default.4.1.txt
  • tests/tests/regressions/.gh-90.rto/default.1.1.txt
  • tests/tests/regressions/.gh-90.rto/default.1.2.txt
  • tests/tests/regressions/.gh-90.rto/default.2.1.txt
  • tests/tests/regressions/.gh-90.rto/default.2.2.txt
  • tests/tests/regressions/.gh-90.rto/default.3.1.txt
  • tests/tests/regressions/.gh-90.rto/default.3.2.txt
  • tests/tests/regressions/.gh-90.rto/default.4.1.txt
  • tests/tests/regressions/.gh-90.rto/default.4.2.txt
  • tests/tests/regressions/.gh-90.rto/default.5.1.txt
  • tests/tests/regressions/.gh-90.rto/default.5.2.txt
  • tests/tests/regressions/.gh-90.rto/default.6.1.txt
  • tests/tests/regressions/.gh-90.rto/default.6.2.txt
  • tests/tests/regressions/gh-90-old-modes.sft.cpp
  • tests/tests/regressions/gh-90-warn.sft.cpp
  • tests/tests/regressions/gh-90.sft.cpp
Files with no reviewable changes: 4
  • tests/tests/imported/gnu/cpp/cpp0x/.constexpr-delegating3.rto/edg_x86_32_cp.1.1.txt
  • tests/tests/imported/gnu/cpp/cpp2a/.constexpr-init18.rto/default.1.1.txt
  • tests/tests/imported/clang/cpp/SemaCXX/.cxx2c-placeholder-vars.rto/default.1.1.txt
  • tests/tests/imported/gnu/cpp/cpp0x/.constexpr-delegating3.rto/edg_x86_32.1.1.txt

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Walkthrough

The compiler updates class-prvalue member selection for specified GNU and Clang emulation versions. It adjusts value initialization and object-initialization tracking, and adds tests and expected-output updates for member access, temporary lifetime, and constant evaluation.

Changes: Class prvalue member semantics

Layer / File(s) Summary
Member selection rules and CWG 616 tests
src/cmd_line.c, src/exprutil.c, src/il_walk.c, tests/tests/cwg/*, tests/tests/imported/clang/cpp/CXX/drs/.cwg6xx.rto/*
C++14 mode enables xvalue selection for the specified GNU and Clang versions. Traversal follows the configured addressing path. CWG 616 tests check direct and pointer-to-member access, and expected diagnostics are updated.
Initialization and constant-evaluation behavior
src/interpret.c, src/pending_changes/gh-90-*.txt, tests/tests/imported/clang/cpp/CXX/dcl.decl/..., tests/tests/imported/clang/cpp/CXX/expr/expr.const/*, tests/tests/imported/clang/cpp/SemaCXX/*, tests/tests/imported/gnu/cpp/*
Value initialization now recursively zero-initializes classes without user-provided default constructors. Addressing members of class rvalues no longer marks the complete object initialized. Related expected diagnostics and issue notes are updated.
Lifetime and warning regressions
tests/tests/regressions/gh-90*.sft.cpp, tests/tests/regressions/.gh-90*.rto/*
Regression tests check temporary lifetime for references to members and array elements across compiler versions. They also check warnings for returning references or pointers into temporary members.

Priority: Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix · Severity of issue fixed: Medium

Possibly related PRs

  • edgcpp/compiler#388: Both changes cover analysis of references to temporary objects, including references to temporary members.

Suggested reviewers: darkarc

Merge Risk: Minimal · up to 4bea6

The change appears mergeable after normal checks. The supplied evidence does not establish a remaining behavior regression in the targeted compiler modes.

Pre-merge checks: Passed 4 · Inconclusive 1

Failed Failed checks: 1 inconclusive

Check name Status Explanation Resolution
Docstring Coverage Inconclusive Docstring coverage is 36.36% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 11 functions across 5 files. (59 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: lifetime extension through members of temporary objects in GNU and Clang modes, with the related issue identified.
Linked Issues check Passed Issue #90 requires that binding a reference to a member of a class temporary (const int &r = A().b;) extends the lifetime of the class temporary, as GCC and Clang do. The only directly linked issue …
Out of Scope Changes check Passed The changes stay within the scope of GH #90.

- src/cmd_line.c, src/exprutil.c, src/il_walk.c (comments only): these changes implement Core issue 616 and the traversal needed to keep the return-…
Full details: Linked Issues check

Explanation

Issue #90 requires that binding a reference to a member of a class temporary (const int &amp;r = A().b;) extends the lifetime of the class temporary, as GCC and Clang do. The only directly linked issue is #90, and it is open. Its requirement is a coding requirement.

The PR meets this requirement for the GNU and Clang emulation modes:

  • src/cmd_line.c: selection_from_prvalue_is_xvalue is enabled when rvalue references are enabled and the emulated compiler is GCC 9.0 or later, or Clang 4.0 or later. This applies Core issue 616, so A().b is an xvalue and the reference extends the temporary's lifetime.
  • src/exprutil.c: is_glvalue_for_auto_object and is_address_of_auto_object follow the class prvalue through the new xvalue. This keeps the warning for returning a reference to a local temporary.
  • src/interpret.c: removes the "fully initialized" marking for . and .* on a class prvalue, and zeroes value-initialized classes. This keeps the constant evaluator correct after the change.
  • Regression tests regressions/gh-90.sft.cpp and regressions/gh-90-warn.sft.cpp cover the lifetime case for g++ 9+ and Clang 4+. regressions/gh-90-old-modes.sft.cpp checks that older emulated versions and strict mode keep their behavior.

The PR description reports that the full suite passes on commit 4bea665 (GitHub Actions run 40175117293). This report is author-supplied. I did not verify the CI result. The code changes in the summary match the requirement.

No unmet requirement was found. The issue's example does not state an emulation mode. The PR description states that strict mode already extends the lifetime, so the reported failure must occur in GNU or Clang mode, which this PR addresses.

Full details: Out of Scope Changes check

Explanation

The changes stay within the scope of GH #90.

  • src/cmd_line.c, src/exprutil.c, src/il_walk.c (comments only): these changes implement Core issue 616 and the traversal needed to keep the return-to-temporary warnings. They are in scope.
  • src/interpret.c value-initialization change: the PR description states that this is a prerequisite for removing the shortcut in eok_dot_field and eok_pm_field. Without it, removing the shortcut rejects B().y in dcl.init.general/p16-cxx20 (GH69890). This is a justified supporting change.
  • src/pending_changes/gh-90-*.txt: documentation entries for the two commits. They are in scope.
  • Updated expectation files under tests/tests/imported/... and tests/tests/regressions/...: these record diagnostic changes that follow directly from the lifetime and constant-evaluation changes. The PR description lists each one with its cause.
  • Deletion of edg_x86_32.1.1.txt and edg_x86_32_cp.1.1.txt for gnu/cpp/cpp0x/constexpr-delegating3: the PR states that these recordings are now identical to default.1.1.txt. This is a consequence of the change.
  • Related but separate follow-ups (Core issue 1213, member function calls on class prvalues, delegation to a defaulted constructor) are excluded from this PR. The diff does not include them.

I did not inspect the full diff. This verdict relies on the change summaries and the PR description. The file tests/expectations/edg_x86_64/imported.log is in ignored_files and was not inspected. It does not affect this verdict.

Full details: Docstring Coverage

Explanation

Docstring coverage is 36.36% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 11 functions across 5 files. (59 skipped: 56 unsupported, 3 too large.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[GNATS 29059] Lifetime extension

2 participants