-disallow-non-constant-globals

This commit is contained in:
gingerBill
2026-05-04 11:28:57 +01:00
parent 83dab63dcd
commit cdc0efce43
3 changed files with 12 additions and 0 deletions

View File

@@ -607,6 +607,7 @@ struct BuildContext {
isize max_error_count;
bool bedrock;
bool disable_non_constant_globals;
u32 cmd_doc_flags;

View File

@@ -2071,6 +2071,10 @@ gb_internal bool lb_init_global_var(lbModule *m, lbProcedure *p, Entity *e, Ast
}
var.is_initialized = true;
if (build_context.disable_non_constant_globals) {
error(e->token, "Non-constant initialization of a global variable is disallowed with '-disable_non_constant_globals'");
}
}
return false;
}

View File

@@ -395,6 +395,7 @@ enum BuildFlagKind {
BuildFlag_BuildDiagnostics,
BuildFlag_Bedrock,
BuildFlag_DisableNonConstantGlobals,
// internal use only
BuildFlag_InternalFastISel,
@@ -630,6 +631,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_BuildDiagnostics, str_lit("build-diagnostics"), BuildFlagParam_None, Command__does_build);
add_flag(&build_flags, BuildFlag_Bedrock, str_lit("bedrock"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_DisableNonConstantGlobals, str_lit("disable-non-constant-globals"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_InternalFastISel, str_lit("internal-fast-isel"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalIgnoreLazy, str_lit("internal-ignore-lazy"), BuildFlagParam_None, Command_all);
@@ -1606,6 +1608,11 @@ gb_internal bool parse_build_flags(Array<String> args) {
case BuildFlag_Bedrock:
build_context.bedrock = true;
build_context.no_rtti = true;
build_context.disable_non_constant_globals = true;
break;
case BuildFlag_DisableNonConstantGlobals:
build_context.disable_non_constant_globals = true;
break;
case BuildFlag_InternalFastISel: