From 65551ba8fb862a9caef97b3c84b17baa7715bbb6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Apr 2021 00:04:47 +0100 Subject: Add `optimization_mode` attribute for procedures Allowed modes: "none", "minimal", "size", "speed" Currently: none == minimal and size == speed --- src/check_decl.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/check_decl.cpp') diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 498cde196..e74504a1a 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -707,6 +707,18 @@ void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { e->flags |= EntityFlag_Cold; } + e->Procedure.optimization_mode = cast(ProcedureOptimizationMode)ac.optimization_mode; + + + switch (e->Procedure.optimization_mode) { + case ProcedureOptimizationMode_None: + case ProcedureOptimizationMode_Minimal: + if (pl->inlining == ProcInlining_inline) { + error(e->token, "#force_inline cannot be used in conjunction with the attribute 'optimization_mode' with neither \"none\" nor \"minimal\""); + } + break; + } + e->Procedure.is_export = ac.is_export; e->deprecated_message = ac.deprecated_message; ac.link_name = handle_link_name(ctx, e->token, ac.link_name, ac.link_prefix); -- cgit v1.2.3