From bf4aa9b5561fb84f0a56ef0f1833fd30aa2207d0 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:47:12 +0200 Subject: [PATCH] stronger +/- checks in check_target_feature_is_enabled --- src/build_settings.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index c12107bf7..8eed4c41a 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -2215,18 +2215,25 @@ gb_internal bool check_target_feature_is_enabled(String const &feature, String * } if (feature_str == "") break; - if (!string_set_exists(&build_context.target_features_set, str)) { - String plus_str = concatenate_strings(temporary_allocator(), make_string_c("+"), feature_str); - - if (want_enabled && !string_set_exists(&build_context.target_features_set, plus_str)) { - if (not_enabled) *not_enabled = str; - return false; + String plus_str = concatenate_strings(temporary_allocator(), make_string_c("+"), feature_str); + String minus_str = concatenate_strings(temporary_allocator(), make_string_c("-"), feature_str); + + bool has_raw = string_set_exists(&build_context.target_features_set, str); + bool has_plus = string_set_exists(&build_context.target_features_set, plus_str); + bool has_minus = string_set_exists(&build_context.target_features_set, minus_str); + + bool is_enabled = (has_plus || has_raw) && !has_minus; + + if ((has_plus || has_raw) && has_minus) { + printf("ENTRIES for '%.*s' / '%.*s':\n", LIT(plus_str), LIT(minus_str)); + for (StringSetEntry& str : build_context.target_features_set) { + printf("\thash: %i, next: %i, val: %.*s\n", str.hash, str.next, LIT(str.value)); } } + + GB_ASSERT(!((has_plus || has_raw) && has_minus)); - String minus_str = concatenate_strings(temporary_allocator(), make_string_c("-"), feature_str); - - if (!want_enabled && !string_set_exists(&build_context.target_features_set, minus_str)) { + if (want_enabled != is_enabled) { if (not_enabled) *not_enabled = str; return false; }