Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Non-comptime local functions silently fail in a comptime context #5333

Closed
Tracked by #4594
jfecher opened this issue Jun 25, 2024 · 0 comments · Fixed by #5334
Closed
Tracked by #4594

Non-comptime local functions silently fail in a comptime context #5333

jfecher opened this issue Jun 25, 2024 · 0 comments · Fixed by #5334
Labels
bug Something isn't working

Comments

@jfecher
Copy link
Contributor

jfecher commented Jun 25, 2024

Aim

Calling a non-comptime function in the same crate from within a comptime block:

fn main() {
    comptime { foo(); }
}

fn foo() {
    println("foo!");
}

Expected Behavior

An error since non-comptime functions in the same crate cannot be called from comptime contexts. This is because comptime items are elaborated before all non-comptime items.

Bug

The comptime interpreter will silently see only an empty block as the definition of foo and nothing will be printed out.

To Reproduce

Project Impact

None

Impact Context

No response

Workaround

None

Workaround Description

No response

Additional Context

No response

Installation Method

None

Nargo Version

No response

NoirJS Version

No response

Would you like to submit a PR for this Issue?

None

Support Needs

No response

@jfecher jfecher added the bug Something isn't working label Jun 25, 2024
@github-project-automation github-project-automation bot moved this to 📋 Backlog in Noir Jun 25, 2024
github-merge-queue bot pushed a commit that referenced this issue Jun 26, 2024
# Description

## Problem\*

Resolves #5333

## Summary\*

Issues an error when a non-comptime function in the same crate is called
from a comptime context:

```
error: `id` cannot be called in a `comptime` context here
  ┌─ /.../non_comptime_local_fn_call/src/main.nr:3:18
  │
3 │         let _a = id(3);
  │                  ----- This function must be `comptime` or in a separate crate to be called
  │
```

## Additional Context

This limitation is because all comptime items are elaborated before
non-comptime items within a crate.

## Documentation\*

Check one:
- [ ] No documentation needed.
- [ ] Documentation included in this PR.
- [x] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

---------

Co-authored-by: Tom French <[email protected]>
@github-project-automation github-project-automation bot moved this from 📋 Backlog to ✅ Done in Noir Jun 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

1 participant