Browse Source

Enforce atomic on hasher id

gingerBill 2 years ago
parent
commit
e488cf4601
2 changed files with 3 additions and 2 deletions
  1. 2 2
      src/llvm_backend.cpp
  2. 1 0
      src/llvm_backend_general.cpp

+ 2 - 2
src/llvm_backend.cpp

@@ -304,10 +304,10 @@ gb_internal lbValue lb_hasher_proc_for_type(lbModule *m, Type *type) {
 		return {(*found)->value, (*found)->type};
 	}
 
-	static u32 proc_index = 0;
+	static std::atomic<u32> proc_index = 0;
 
 	char buf[32] = {};
-	isize n = gb_snprintf(buf, 32, "__$hasher%u", ++proc_index);
+	isize n = gb_snprintf(buf, 32, "__$hasher%u", 1+proc_index.fetch_add(1));
 	char *str = gb_alloc_str_len(permanent_allocator(), buf, n-1);
 	String proc_name = make_string_c(str);
 

+ 1 - 0
src/llvm_backend_general.cpp

@@ -2619,6 +2619,7 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e)
 
 	lbProcedure *missing_proc = lb_create_procedure(m, e, ignore_body);
 	if (ignore_body) {
+		GB_ASSERT(other_module != nullptr);
 		mutex_lock(&other_module->values_mutex);
 		auto *found = map_get(&other_module->values, e);
 		if (found == nullptr) {