aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-02-29 09:55:25 +0000
committergingerBill <bill@gingerbill.org>2020-02-29 09:55:25 +0000
commit8ec5987ae1a46682f8fc11a3f0683f6b6e425d3b (patch)
tree3e06735d4ada793ec52545b8ecd534d99f5ecec6 /src/check_expr.cpp
parent470508adbc9fb8b0e79d8ef1c7ca6a92d4babfcd (diff)
parent408fa027af4ad8e5dfc8296521f55c88b1afc86c (diff)
Merge branch 'master' into llvm-integration
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp22
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;
}