[compiler-rt] d49aaaf - [memprof] Fix UB.
    Florian Mayer via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Feb 11 13:01:24 PST 2022
    
    
  
Author: Florian Mayer
Date: 2022-02-11T13:01:14-08:00
New Revision: d49aaaf44f508c8731672dcacaa62dd947acd414
URL: https://github.com/llvm/llvm-project/commit/d49aaaf44f508c8731672dcacaa62dd947acd414
DIFF: https://github.com/llvm/llvm-project/commit/d49aaaf44f508c8731672dcacaa62dd947acd414.diff
LOG: [memprof] Fix UB.
An infinite loop without any effects is illegal C++ and can be optimized
away by the compiler.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D119575
Added: 
    
Modified: 
    compiler-rt/lib/asan/asan_rtl.cpp
    compiler-rt/lib/memprof/memprof_rtl.cpp
Removed: 
    
################################################################################
diff  --git a/compiler-rt/lib/asan/asan_rtl.cpp b/compiler-rt/lib/asan/asan_rtl.cpp
index 338aa5046408..18df9f7e5494 100644
--- a/compiler-rt/lib/asan/asan_rtl.cpp
+++ b/compiler-rt/lib/asan/asan_rtl.cpp
@@ -45,7 +45,9 @@ static void AsanDie() {
   static atomic_uint32_t num_calls;
   if (atomic_fetch_add(&num_calls, 1, memory_order_relaxed) != 0) {
     // Don't die twice - run a busy loop.
-    while (1) { }
+    while (1) {
+      internal_sched_yield();
+    }
   }
   if (common_flags()->print_module_map >= 1)
     DumpProcessMap();
diff  --git a/compiler-rt/lib/memprof/memprof_rtl.cpp b/compiler-rt/lib/memprof/memprof_rtl.cpp
index d5ea4102f388..21424fb4f072 100644
--- a/compiler-rt/lib/memprof/memprof_rtl.cpp
+++ b/compiler-rt/lib/memprof/memprof_rtl.cpp
@@ -39,6 +39,7 @@ static void MemprofDie() {
   if (atomic_fetch_add(&num_calls, 1, memory_order_relaxed) != 0) {
     // Don't die twice - run a busy loop.
     while (1) {
+      internal_sched_yield();
     }
   }
   if (common_flags()->print_module_map >= 1)
        
    
    
More information about the llvm-commits
mailing list