From 7b516e6113b3c836c5ea0dbd65d00a36891de6bb Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Wed, 13 Nov 2024 23:34:34 +0100 Subject: [PATCH] `@builtin` was not respected for generic modules #1617. --- releasenotes.md | 1 + src/compiler/sema_name_resolution.c | 2 +- test/test_suite/generic/generic_builtin.c3t | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/test_suite/generic/generic_builtin.c3t diff --git a/releasenotes.md b/releasenotes.md index 6057f519f..5aae05569 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -8,6 +8,7 @@ ### Fixes - Fix bug where `a > 0 ? f() : g()` could cause a compiler crash if both returned `void!`. +- `@builtin` was not respected for generic modules #1617. ### Stdlib changes diff --git a/src/compiler/sema_name_resolution.c b/src/compiler/sema_name_resolution.c index a5474d742..2583dcc48 100644 --- a/src/compiler/sema_name_resolution.c +++ b/src/compiler/sema_name_resolution.c @@ -992,7 +992,7 @@ bool unit_resolve_parameterized_symbol(SemaContext *context, NameResolve *name_r sema_report_error_on_decl(context, name_resolve); return false; } - if (!decl_is_user_defined_type(name_resolve->found) && !name_resolve->path) + if (!decl_is_user_defined_type(name_resolve->found) && !name_resolve->path && !name_resolve->found->is_autoimport) { if (name_resolve->suppress_error) return false; RETURN_SEMA_ERROR(name_resolve, "Function and variables must be prefixed with a path, e.g. 'foo::%s'.", name_resolve->symbol); diff --git a/test/test_suite/generic/generic_builtin.c3t b/test/test_suite/generic/generic_builtin.c3t new file mode 100644 index 000000000..baaa28f29 --- /dev/null +++ b/test/test_suite/generic/generic_builtin.c3t @@ -0,0 +1,16 @@ +module add(); +fn Type add(Type a, Type b) @builtin => + a + b; + +module iadd; +fn int iadd(int a, int b) @builtin => + a + b; + +module main; +import std::io, add, iadd; + +fn void! main() +{ + io::printfn("%s", iadd(1,2)); // Fine + io::printfn("%s", add()(1,2)); // Error +} \ No newline at end of file