[SystemZ] Add test missing from r186148
[oota-llvm.git] / include / llvm / Support / DynamicLibrary.h
index 04100cd891ae7ba83527cc5ee59f1ccf3b405a98..1e2d16ccbc810d2ad6ee4edefa49d0221ff4266f 100644 (file)
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_SYSTEM_DYNAMIC_LIBRARY_H
-#define LLVM_SYSTEM_DYNAMIC_LIBRARY_H
+#ifndef LLVM_SYSTEM_DYNAMICLIBRARY_H
+#define LLVM_SYSTEM_DYNAMICLIBRARY_H
 
 #include <string>
 
 namespace llvm {
+
+class StringRef;
+
 namespace sys {
 
   /// This class provides a portable interface to dynamic libraries which also
@@ -32,13 +35,18 @@ namespace sys {
   /// Note: there is currently no interface for temporarily loading a library,
   /// or for unloading libraries when the LLVM library is unloaded.
   class DynamicLibrary {
+    // Placeholder whose address represents an invalid library.
+    // We use this instead of NULL or a pointer-int pair because the OS library
+    // might define 0 or 1 to be "special" handles, such as "search all".
+    static char Invalid;
+
     // Opaque data used to interface with OS-specific dynamic library handling.
     void *Data;
 
-    explicit DynamicLibrary(void *data = 0) : Data(data) {}
+    explicit DynamicLibrary(void *data = &Invalid) : Data(data) {}
   public:
     /// Returns true if the object refers to a valid library.
-    bool isValid() { return Data != 0; }
+    bool isValid() { return Data != &Invalid; }
 
     /// Searches through the library for the symbol \p symbolName. If it is
     /// found, the address of that symbol is returned. If not, NULL is returned.