diff options
| author | gingerBill <bill@gingerbill.org> | 2020-02-29 09:55:25 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-02-29 09:55:25 +0000 |
| commit | 8ec5987ae1a46682f8fc11a3f0683f6b6e425d3b (patch) | |
| tree | 3e06735d4ada793ec52545b8ecd534d99f5ecec6 /src/check_expr.cpp | |
| parent | 470508adbc9fb8b0e79d8ef1c7ca6a92d4babfcd (diff) | |
| parent | 408fa027af4ad8e5dfc8296521f55c88b1afc86c (diff) | |
Merge branch 'master' into llvm-integration
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index cf9e42810..d44c4d681 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5280,6 +5280,10 @@ bool check_builtin_procedure(CheckerContext *c, Operand *operand, Ast *call, i32 break; } + case BuiltinProc_cpu_relax: + operand->mode = Addressing_NoValue; + break; + case BuiltinProc_atomic_fence: case BuiltinProc_atomic_fence_acq: case BuiltinProc_atomic_fence_rel: @@ -5987,6 +5991,15 @@ CALL_ARGUMENT_CHECKER(check_call_arguments_internal) { } score += s; + if (e->flags & EntityFlag_ConstInput) { + if (o.mode != Addressing_Constant) { + if (show_error) { + error(o.expr, "Expected a constant value for the argument '%.*s'", LIT(e->token.string)); + } + err = CallArgumentError_NoneConstantParameter; + } + } + if (o.mode == Addressing_Type && is_type_typeid(e->type)) { add_type_info_type(c, o.type); add_type_and_value(c->info, o.expr, Addressing_Value, e->type, exact_value_typeid(o.type)); @@ -6242,6 +6255,15 @@ CALL_ARGUMENT_CHECKER(check_named_call_arguments) { } err = CallArgumentError_WrongTypes; } + + if (e->flags & EntityFlag_ConstInput) { + if (o->mode != Addressing_Constant) { + if (show_error) { + error(o->expr, "Expected a constant value for the argument '%.*s'", LIT(e->token.string)); + } + err = CallArgumentError_NoneConstantParameter; + } + } } score += s; } |