Skip to content

checker: detect recursive .str() method calls - #27926

Merged
medvednikov merged 30 commits into
masterfrom
fix-recursive-str-sumtype
Jul 26, 2026
Merged

checker: detect recursive .str() method calls#27926
medvednikov merged 30 commits into
masterfrom
fix-recursive-str-sumtype

Conversation

@medvednikov

Copy link
Copy Markdown
Member

Summary

  • Detect infinite recursive .str() method calls when .str() is called explicitly (e.g. n.str()) on the same receiver, not just through string interpolation
  • Previously, only string interpolation ('${n}') inside a .str() method was caught; explicit n.str() calls caused a segfault at runtime instead of a compile error
  • Add test case for sum type with recursive .str() in a match else branch

Closes #27923

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@GGRei

GGRei commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 156b3f7c28

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated
Use the already-unwrapped `left_expr` instead of `node.left` so that
`(n).str()` is also caught as recursive.

Fix existing alias `str()` tests that were silently recursive (would
segfault if actually called at runtime) by casting to the underlying
array type.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@GGRei

GGRei commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 85d4911c79

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated
@medvednikov

Copy link
Copy Markdown
Member Author

Verdict

Request changes. On the current head, 85d4911c79, the first review’s two problems are fixed, but the second review identifies two real P2 correctness issues that remain in the checker. The PR is still open with two commits and no newer fix after that review.

Findings

P2 — The check rejects valid, terminating recursion on mutable receivers

The new condition rejects every call to receiver.str() from that receiver’s str() method. It considers only the method name, receiver identifier, and type; it does not account for a mutable receiver changing state before the recursive call.

For example, this has a base case and makes progress:

struct Countdown {
mut:
    remaining int
}

fn (mut c Countdown) str() string {
    if c.remaining == 0 {
        return ''
    }
    c.remaining--
    return c.str()
}

The new guard would reject the final line even though the recursion terminates. Mutable str() methods are valid V—the repository already has pub fn (mut w Writer) str() string—so this is not an inherently invalid receiver form.

The practical minimum would be to avoid this diagnostic for mutable receivers and add a positive regression test. More generally, the PR description says it detects infinite recursion, while the implementation currently bans syntactic self-recursion regardless of progress.

P2 — Dereferencing a pointer receiver bypasses the diagnostic

For a pointer receiver:

struct Foo {}

fn (f &Foo) str() string {
    return (*f).str()
}

method_call removes only parentheses, leaving (*f) as an ast.PrefixExpr; therefore the left_expr is ast.Ident requirement is false and the diagnostic is skipped.

The remaining method-resolution path still looks up str on the underlying receiver type and records the method’s declared pointer receiver, so this expression targets the same method rather than an unrelated built-in.

The receiver normalization should recognize an explicit dereference of the current receiver, or use a helper that canonicalizes supported same-receiver forms. A dedicated (*f).str() negative test should accompany the fix.

Test coverage gap

The latest commit specifically changed the implementation so (n).str() is caught, but the only new checker test still exercises plain n.str(). There is no regression case for the parenthesized form that prompted the change.

I would add either another branch or a separate fixture containing:

fn (n Num) str() string {
    return (n).str()
}

This is not a current implementation failure, but it leaves the recent fix unprotected.

Comments and recent commits

The initial commit, 156b3f7c28, added the direct-call check and the sum-type regression test.

The first automated review raised:

  1. Parenthesized receivers bypassing the check.
  2. Existing alias-array str() fixtures now being rejected.

Commit 85d4911c79 addresses both: it switches to the already-unwrapped left_expr and explicitly casts the aliases to []Value before invoking the underlying array formatter. The commit also clarifies that the old alias implementations were silently recursive rather than valid delegation.

A second automated review of 85d4911c79 then raised the mutable-terminating-recursion and pointer-dereference cases above. I agree with both findings. The remaining conversation is review-trigger/quota bot traffic; there is no substantive human technical discussion yet.

Recommendation: keep the first two comments considered addressed, request changes for the two current P2 findings, and request the missing parenthesized-receiver regression test. CI and check results were not considered.

… str check

- Don't flag recursive `.str()` on mutable receivers, since they can
  have terminating recursion through state changes.
- Detect `(*f).str()` as a recursive call by recognizing dereference
  prefix expressions targeting the receiver.
- Add parenthesized `(v).str()` regression test to the test fixture.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Unwrap parentheses inside dereference expressions so `(*(f)).str()`
is caught alongside `(*f).str()`. Add test cases for both pointer
dereference forms.
@GGRei

GGRei commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Alex, Should I keep running Codex reviews or not?

@medvednikov

Copy link
Copy Markdown
Member Author

@codex review

@GGRei i got it now, thanks :)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 14578d1700

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Recognize `(&f).str()` as recursive in addition to `(*f).str()` by
accepting both `.mul` and `.amp` prefix operators in the receiver
check.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4cb4b4d665

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Peel through consecutive dereference and address-of prefix expressions
(with parentheses) in a loop so forms like `(*(&q)).str()` are caught.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 724b6472aa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated
…rsive str check

- Unwrap same-type casts (e.g. `Alias(a).str()`) in the receiver
  normalization loop so they don't bypass the diagnostic.
- Remove the `!rec_mut` blanket exemption: a mutable receiver calling
  `.str()` on itself without prior mutation is still infinite recursion.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2ac32b0d16

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated
@medvednikov

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2ac32b0d16

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
…check

- Detect recursion through local receiver aliases (`alias := f;
  alias.str()`) by resolving the variable's initializer expression.
- Detect recursion through interface conversions (`Stringer(f).str()`)
  by unwrapping casts to interface types.
- Document the recursive `.str()` restriction in doc/docs.md.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebdfae3691

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Trace variable aliases transitively with a cycle guard so that
`a := f; b := a; b.str()` is detected as recursive.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 49deea2f5d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
…str check

When a local copy is declared `mut`, it may have been modified before
the `.str()` call, so stop following the alias chain at that point.
This allows valid patterns like `mut next := c; next = ...; next.str()`
while still catching immutable aliases.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d519e65c0b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Propagate `is_changed` to the scope variable when `fail_if_immutable`
marks a variable as changed, so the recursive str check can
distinguish `mut alias := f; alias.str()` (unchanged, still recursive)
from `mut next := f; next = ...; next.str()` (changed, may terminate).

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c0e98d605f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Handle ast.AsCast expressions in both the direct receiver and
alias initializer normalization loops so that patterns like
(Stringer(f) as Foo).str() inside Foo.str are correctly detected
as recursive calls.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c8a57281de

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/tests/sum_type_recursive_str_err.out Outdated
Regenerate the .out file from the actual compiler output to fix
stale line numbers and column offsets that drifted as test cases
were added across commits.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0878e2e574

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread doc/docs.md
When a mutable variable is initialized with a default value and
then reassigned from the receiver, Var.expr still holds the
initializer and alias tracing stops. Detect this by falling back
to a type+mutation check: if the variable is mutable, was changed,
and has the same type as the receiver, treat it as a potential
receiver alias.

Also make the failcompile fence in docs.md self-contained by
including the Color struct definition so check-md validates
against the actual recursive str diagnostic.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4aca876051

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ac891a94ce

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v
Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 21053ab43c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9582045545

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3ce2451591

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v
Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 21e49bea1c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b1e8a5dcbf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v
Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 47ad98d769

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 66ac6bd2af

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3a15df5ea1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v Outdated
Comment thread vlib/v/checker/fn.v Outdated
@medvednikov
medvednikov merged commit c669ee1 into master Jul 26, 2026
65 of 95 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ab0991c9ed

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v
Comment thread vlib/v/checker/fn.v
Comment thread vlib/v/checker/fn.v
@medvednikov

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c669ee1680

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vlib/v/checker/fn.v
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.

segfault when calling custom .str() on a sum type

2 participants