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

Usage of Trait::method syntax on globals results in monomorphisation ICE. #5029

Open
Pasifaee opened this issue May 14, 2024 · 3 comments
Open
Labels
bug Something isn't working

Comments

@Pasifaee
Copy link

Aim

I wanted to have a structure with multiple trait From implementations and use From::from(...) syntax to create a global variable.

Expected Behavior

This code compiles:

struct Struct {
    field: Field
}

impl From<Field> for Struct {
    fn from(field: Field) -> Self {
        Struct { field }
    }
}

impl From<u64> for Struct {
    fn from(num: u64) -> Self {
        Struct { field: num as Field }
    }
}

global s: Struct = From::from(0);

fn main() {
    println(s);
}

Bug

The code above causes compilation panic. I also can't use Struct::from(...) syntax because it causes compiler error: 'Could not resolve 'from' in path'.

To Reproduce

  1. Try to compile the code above.

Project Impact

Nice-to-have

Impact Context

No response

Workaround

None

Workaround Description

No response

Additional Context

No response

Installation Method

Binary (noirup default)

Nargo Version

nargo version = 0.29.0 noirc version = 0.29.0+2da28997dbedce4a00d2162eddb57564bdb23546

NoirJS Version

No response

Would you like to submit a PR for this Issue?

None

Support Needs

No response

@Pasifaee Pasifaee added the bug Something isn't working label May 14, 2024
@TomAFrench
Copy link
Member

This is unrelated to multiple implementations of the same trait as I get the same ICE when commenting out either of the trait impls.

Struct::from issue is due to #4943 (comment)

@TomAFrench
Copy link
Member

Can reproduce this with

global s: BoundedVec<Field, 2> = From::from([0]);

fn main() {
    println(s);
}

so it looks like the issue is specific to usage of Trait::method syntax in globals.

@TomAFrench TomAFrench changed the title Multiple implementations of trait From used globally cause compiler panic Usage of Trait::method syntax on globals results in monomorphisation ICE. May 14, 2024
@TomAFrench
Copy link
Member

For completeness the error is

% nargo compile                                                                                                        ~/aztec-packages/noir/noir-repo/temp tf/native-recursion tom-box
The application panicked (crashed).
Message:  ICE: missing trait impl - should be caught during type checking
Location: compiler/noirc_frontend/src/monomorphization/mod.rs:1027

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
Status: 📋 Backlog
Development

No branches or pull requests

2 participants