diff --git a/src/build_settings.cpp b/src/build_settings.cpp index bb6fa4be0..a8592ecf1 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -607,6 +607,7 @@ struct BuildContext { isize max_error_count; bool bedrock; + bool disable_non_constant_globals; u32 cmd_doc_flags; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 70b87f43a..0bb46d5a7 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -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; } diff --git a/src/main.cpp b/src/main.cpp index 23dfedc57..fc67c20e5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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 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 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: