diff options
-rw-r--r-- | compiler-rt/lib/asan/asan_globals_win.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler-rt/lib/asan/asan_globals_win.cc b/compiler-rt/lib/asan/asan_globals_win.cc index e20b7eff1f7..56c0d1a532f 100644 --- a/compiler-rt/lib/asan/asan_globals_win.cc +++ b/compiler-rt/lib/asan/asan_globals_win.cc @@ -26,7 +26,15 @@ __asan_global __asan_globals_end = {}; static void call_on_globals(void (*hook)(__asan_global *, uptr)) { __asan_global *start = &__asan_globals_start + 1; - __asan_global *end = (__asan_global *)&__asan_globals_end; + __asan_global *end = &__asan_globals_end; + uptr bytediff = (uptr)end - (uptr)start; + if (bytediff % sizeof(__asan_global) != 0) { +#ifdef ASAN_DLL_THUNK + __debugbreak(); +#else + CHECK("corrupt asan global array"); +#endif + } // We know end >= start because the linker sorts the portion after the dollar // sign alphabetically. uptr n = end - start; |