Add LLVM_ATTRIBUTE_USED to fix problems which could be exposed by aggressive global...
authorFangrui Song <i@maskray.me>
Mon, 26 Apr 2021 20:31:37 +0000 (13:31 -0700)
committerFangrui Song <i@maskray.me>
Mon, 26 Apr 2021 20:31:37 +0000 (13:31 -0700)
Note to BuryPointer.cpp:GraveYard. 'unused' cannot prevent (1) dead store
elimination and (2) removal of the global pointer variable (D69428) but 'used' can.

Discovered when comparing link maps between HEAD+D69428 and HEAD.

Reviewed By: lattner

Differential Revision: https://reviews.llvm.org/D101217

llvm/lib/Support/BuryPointer.cpp
llvm/lib/Support/Unix/Signals.inc

index 536aee7..87d2406 100644 (file)
@@ -19,7 +19,7 @@ void BuryPointer(const void *Ptr) {
   // will not be properly buried and a leak detector will report a leak, which
   // is what we want in such case.
   static const size_t kGraveYardMaxSize = 16;
-  LLVM_ATTRIBUTE_UNUSED static const void *GraveYard[kGraveYardMaxSize];
+  LLVM_ATTRIBUTE_USED static const void *GraveYard[kGraveYardMaxSize];
   static std::atomic<unsigned> GraveYardSize;
   unsigned Idx = GraveYardSize++;
   if (Idx >= kGraveYardMaxSize)
index 3d7b5d2..575e2aa 100644 (file)
@@ -255,7 +255,7 @@ static struct {
 // stack if we remove our signal handlers; that can't be done reliably if
 // someone else is also trying to do the same thing.
 static stack_t OldAltStack;
-static void* NewAltStackPointer;
+LLVM_ATTRIBUTE_USED static void *NewAltStackPointer;
 
 static void CreateSigAltStack() {
   const size_t AltStackSize = MINSIGSTKSZ + 64 * 1024;