From eb86b83bd7e87a4b2b2c5ec9b566e826b5443d77 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Tue, 4 Oct 2022 22:41:07 +0200 Subject: [PATCH] Prevent ct_eval from returning an rvalue. --- src/compiler/sema_expr.c | 3 +-- src/version.h | 2 +- test/test_suite/compile_time/ct_eval_sym.c3 | 5 +++++ test/test_suite2/compile_time/ct_eval_sym.c3 | 5 +++++ 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 test/test_suite/compile_time/ct_eval_sym.c3 create mode 100644 test/test_suite2/compile_time/ct_eval_sym.c3 diff --git a/src/compiler/sema_expr.c b/src/compiler/sema_expr.c index abd8a12c5..69addd642 100644 --- a/src/compiler/sema_expr.c +++ b/src/compiler/sema_expr.c @@ -6242,11 +6242,10 @@ static inline bool sema_expr_analyse_ct_eval(SemaContext *context, Expr *expr) case TOKEN_IDENT: case TOKEN_CONST_IDENT: expr->expr_kind = EXPR_IDENTIFIER; - expr->resolve_status = RESOLVE_NOT_DONE; expr->identifier_expr.ident = ident; expr->identifier_expr.path = path; expr->identifier_expr.is_const = type == TOKEN_CONST_IDENT; - return sema_analyse_expr(context, expr); + return sema_analyse_expr_dispatch(context, expr); default: SEMA_ERROR(inner, "Only function, variable and constant names may be resolved with $eval."); return false; diff --git a/src/version.h b/src/version.h index b3504b55b..79982c497 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define COMPILER_VERSION "0.3.66" \ No newline at end of file +#define COMPILER_VERSION "0.3.67" \ No newline at end of file diff --git a/test/test_suite/compile_time/ct_eval_sym.c3 b/test/test_suite/compile_time/ct_eval_sym.c3 new file mode 100644 index 000000000..d351c8d95 --- /dev/null +++ b/test/test_suite/compile_time/ct_eval_sym.c3 @@ -0,0 +1,5 @@ +fn int test() +{ + void* x = (void*)&$eval($$FUNC); + return 1; +} \ No newline at end of file diff --git a/test/test_suite2/compile_time/ct_eval_sym.c3 b/test/test_suite2/compile_time/ct_eval_sym.c3 new file mode 100644 index 000000000..d351c8d95 --- /dev/null +++ b/test/test_suite2/compile_time/ct_eval_sym.c3 @@ -0,0 +1,5 @@ +fn int test() +{ + void* x = (void*)&$eval($$FUNC); + return 1; +} \ No newline at end of file