[compiler-rt] [asan] Speed up ASan ODR indicator-based checking (PR #100923)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 30 15:36:57 PDT 2024


================
@@ -147,14 +163,21 @@ static void CheckODRViolationViaIndicator(const Global *g) {
     *odr_indicator = REGISTERED;
     return;
   }
+
+  // Fetch globals with the same ODR indicator.
+  auto *relevant_globals_lookup =
+      map_of_globals_by_indicator.find(g->odr_indicator);
+  if (!relevant_globals_lookup)
+    return;
+
+  ListOfGlobals *relevant_globals = relevant_globals_lookup->second;
   // If *odr_indicator is DEFINED, some module have already registered
   // externally visible symbol with the same name. This is an ODR violation.
-  for (ListOfGlobals *l = list_of_all_globals; l; l = l->next) {
-    if (g->odr_indicator == l->g->odr_indicator &&
----------------
vitalybuka wrote:

Instead of removal checking that indicator matches is enough

we can't keep just first one with UNREGISTERED, if we unregister it we don't know if there are other with same indicator are still registered

https://github.com/llvm/llvm-project/pull/100923


More information about the llvm-commits mailing list