diff --git a/llvm/lib/Support/DynamicLibrary.cpp b/llvm/lib/Support/DynamicLibrary.cpp index 531c035ab9266..f1c15c00cedea 100644 --- a/llvm/lib/Support/DynamicLibrary.cpp +++ b/llvm/lib/Support/DynamicLibrary.cpp @@ -25,7 +25,7 @@ using namespace llvm::sys; class DynamicLibrary::HandleSet { typedef std::vector HandleList; HandleList Handles; - void *Process = nullptr; + void *Process = &Invalid; public: static void *DLOpen(const char *Filename, std::string *Err); @@ -58,7 +58,7 @@ class DynamicLibrary::HandleSet { Handles.push_back(Handle); } else { #ifndef _WIN32 - if (Process) { + if (Process != &Invalid) { if (CanClose) DLClose(Process); if (Process == Handle) @@ -97,11 +97,11 @@ class DynamicLibrary::HandleSet { assert(!((Order & SO_LoadedFirst) && (Order & SO_LoadedLast)) && "Invalid Ordering"); - if (!Process || (Order & SO_LoadedFirst)) { + if (Process == &Invalid || (Order & SO_LoadedFirst)) { if (void *Ptr = LibLookup(Symbol, Order)) return Ptr; } - if (Process) { + if (Process != &Invalid) { // Use OS facilities to search the current binary and all loaded libs. if (void *Ptr = DLSym(Process, Symbol)) return Ptr; diff --git a/llvm/lib/Support/Unix/DynamicLibrary.inc b/llvm/lib/Support/Unix/DynamicLibrary.inc index 7452913049ebb..b6f8e38a66122 100644 --- a/llvm/lib/Support/Unix/DynamicLibrary.inc +++ b/llvm/lib/Support/Unix/DynamicLibrary.inc @@ -17,7 +17,7 @@ DynamicLibrary::HandleSet::~HandleSet() { // Close the libraries in reverse order. for (void *Handle : llvm::reverse(Handles)) ::dlclose(Handle); - if (Process) + if (Process != &Invalid) ::dlclose(Process); // llvm_shutdown called, Return to default diff --git a/llvm/lib/Support/Windows/DynamicLibrary.inc b/llvm/lib/Support/Windows/DynamicLibrary.inc index c434bd62f04c5..4f8c96e78f6ce 100644 --- a/llvm/lib/Support/Windows/DynamicLibrary.inc +++ b/llvm/lib/Support/Windows/DynamicLibrary.inc @@ -26,7 +26,7 @@ DynamicLibrary::HandleSet::~HandleSet() { FreeLibrary(HMODULE(Handle)); // 'Process' should not be released on Windows. - assert((!Process || Process == this) && "Bad Handle"); + assert((Process == &Invalid || Process == this) && "Bad Handle"); // llvm_shutdown called, Return to default DynamicLibrary::SearchOrder = DynamicLibrary::SO_Linker; } @@ -60,7 +60,7 @@ static DynamicLibrary::HandleSet *IsOpenedHandlesInstance(void *Handle) { void DynamicLibrary::HandleSet::DLClose(void *Handle) { if (HandleSet *HS = IsOpenedHandlesInstance(Handle)) - HS->Process = nullptr; // Just drop the *Process* handle. + HS->Process = &Invalid; // Just drop the *Process* handle. else FreeLibrary((HMODULE)Handle); } @@ -89,7 +89,7 @@ void *DynamicLibrary::HandleSet::DLSym(void *Handle, const char *Symbol) { return (void *)uintptr_t(GetProcAddress((HMODULE)Handle, Symbol)); // Could have done a dlclose on the *Process* handle - if (!HS->Process) + if (HS->Process == &Invalid) return nullptr; // Trials indicate EnumProcessModulesEx is consistantly faster than using