diff --git a/compiler/noirc_frontend/src/parser/parser.rs b/compiler/noirc_frontend/src/parser/parser.rs index 088aa7dd4fb..225e5afaa14 100644 --- a/compiler/noirc_frontend/src/parser/parser.rs +++ b/compiler/noirc_frontend/src/parser/parser.rs @@ -1684,10 +1684,22 @@ fn literal() -> impl NoirParser { }) } +fn literal_with_sign() -> impl NoirParser { + choice(( + literal(), + just(Token::Minus).then(literal()).map(|(_, exp)| match exp { + ExpressionKind::Literal(Literal::Integer(value, sign)) => { + ExpressionKind::Literal(Literal::Integer(value, !sign)) + } + _ => unreachable!(), + }), + )) +} + fn literal_or_collection<'a>( expr_parser: impl ExprParser + 'a, ) -> impl NoirParser + 'a { - choice((literal(), constructor(expr_parser.clone()), array_expr(expr_parser))) + choice((literal_with_sign(), constructor(expr_parser.clone()), array_expr(expr_parser))) } #[cfg(test)] diff --git a/test_programs/execution_success/regression_2660/Nargo.toml b/test_programs/execution_success/regression_2660/Nargo.toml new file mode 100644 index 00000000000..1ea0058684b --- /dev/null +++ b/test_programs/execution_success/regression_2660/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "regression_2660" +version = "0.1.0" +type = "bin" +authors = [""] + +[dependencies] \ No newline at end of file diff --git a/test_programs/execution_success/regression_2660/Prover.toml b/test_programs/execution_success/regression_2660/Prover.toml new file mode 100644 index 00000000000..4dd6b405159 --- /dev/null +++ b/test_programs/execution_success/regression_2660/Prover.toml @@ -0,0 +1 @@ +x = "1" diff --git a/test_programs/execution_success/regression_2660/src/main.nr b/test_programs/execution_success/regression_2660/src/main.nr new file mode 100644 index 00000000000..f32bc924e3a --- /dev/null +++ b/test_programs/execution_success/regression_2660/src/main.nr @@ -0,0 +1,6 @@ +global foo = -1; + +fn main(x: i32) { + let y = x + foo; + assert(y == 0); +}