aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2022-05-03 11:44:55 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2022-05-03 11:44:55 +0200
commit8bac82320fbba53a440bf42b117c702e726db093 (patch)
tree7689266d7e0439315872f039b3fd6fbdf21dee6f /src/main.cpp
parent14bf20320a9045f2808032b348bb660773d2cae3 (diff)
Fix -opt: parsing.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 818a783e1..86c1544a4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -961,7 +961,26 @@ bool parse_build_flags(Array<String> args) {
bad_flags = true;
break;
}
- build_context.optimization_level = cast(i32)big_int_to_i64(&value.value_integer);
+ // NOTE(Jeroen): We can't rely on `value.value_integer` here, because words will be returned as `0`.
+ // Meaning that -opt:speed will coerce to opt:0. That's not what the user intended.
+ // Instead we'll just compare 0..3 directly.
+ if (param == "0") {
+ build_context.optimization_level = 0;
+ } else if (param == "1") {
+ build_context.optimization_level = 1;
+ } else if (param == "2") {
+ build_context.optimization_level = 2;
+ } else if (param == "3") {
+ build_context.optimization_level = 3;
+ } else {
+ gb_printf_err("Invalid optimization level for -o:<integer>, got %.*s\n", LIT(param));
+ gb_printf_err("Valid optimization levels:\n");
+ gb_printf_err("\t0\n");
+ gb_printf_err("\t1\n");
+ gb_printf_err("\t2\n");
+ gb_printf_err("\t3\n");
+ bad_flags = true;
+ }
break;
}
case BuildFlag_OptimizationMode: {