diff --git a/lib/std/core/mem.c3 b/lib/std/core/mem.c3 index e41ccba09..3f372be40 100644 --- a/lib/std/core/mem.c3 +++ b/lib/std/core/mem.c3 @@ -57,10 +57,9 @@ macro void clear(void* dst, usize len, usize $dst_align = 0, bool $is_volatile = * @require $typeof(a).kind != TypeKind.POINTER || len > -1 * @checked (a = b), (b = a) **/ -macro bool equals(a, b, isize len = -1, usize $alignment = 0) +macro bool equals(a, b, isize len = -1, usize $align = 0) { - var $align = $alignment; - $if (!$alignment): + $if (!$align): $align = $alignof($typeof(a[0])); $endif; void* x = void; diff --git a/src/compiler/sema_expr.c b/src/compiler/sema_expr.c index 8245994c4..bb36074dc 100644 --- a/src/compiler/sema_expr.c +++ b/src/compiler/sema_expr.c @@ -1866,6 +1866,11 @@ bool sema_expr_analyse_macro_call(SemaContext *context, Expr *call_expr, Expr *s { Decl *param = params[i]; param->var.init_expr = args[i]; + VarDeclKind kind = param->var.kind; + if (kind == VARDECL_PARAM_CT_TYPE || kind == VARDECL_PARAM_CT) + { + param->var.scope_depth = context->active_scope.depth + 1; + } } Decl **body_params = call_expr->call_expr.body_arguments; diff --git a/test/test_suite/macros/modify_ct_param.c3 b/test/test_suite/macros/modify_ct_param.c3 new file mode 100644 index 000000000..80219fe80 --- /dev/null +++ b/test/test_suite/macros/modify_ct_param.c3 @@ -0,0 +1,13 @@ +module test; + +macro test($baz, $Type) +{ + $baz = 123; + $Type = int; +} +fn void main() +{ + var $foo = 1; + $foo = 4; + test(4, double); +} diff --git a/test/test_suite2/macros/modify_ct_param.c3 b/test/test_suite2/macros/modify_ct_param.c3 new file mode 100644 index 000000000..80219fe80 --- /dev/null +++ b/test/test_suite2/macros/modify_ct_param.c3 @@ -0,0 +1,13 @@ +module test; + +macro test($baz, $Type) +{ + $baz = 123; + $Type = int; +} +fn void main() +{ + var $foo = 1; + $foo = 4; + test(4, double); +}