PointerUnion::getAddrOf() does not need to be template since we can only
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 6 Mar 2012 07:14:54 +0000 (07:14 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 6 Mar 2012 07:14:54 +0000 (07:14 +0000)
use the first pointer type for it. Rename it to getAddrOfPtr1().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152106 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/PointerIntPair.h
include/llvm/ADT/PointerUnion.h
include/llvm/ADT/TinyPtrVector.h

index 85dbba2b4a4ae9b361280cb9616a3dd52bbd473f..ccdcd1a8d1b949c5f1698d4a74b0288f28420e84 100644 (file)
@@ -92,10 +92,14 @@ public:
   }
 
   PointerTy const *getAddrOfPointer() const {
+    return const_cast<PointerIntPair *>(this)->getAddrOfPointer();
+  }
+
+  PointerTy *getAddrOfPointer() {
     assert(Value == reinterpret_cast<intptr_t>(getPointer()) &&
            "Can only return the address if IntBits is cleared and "
            "PtrTraits doesn't change the pointer");
-    return reinterpret_cast<PointerTy const *>(&Value);
+    return reinterpret_cast<PointerTy *>(&Value);
   }
 
   void *getOpaqueValue() const { return reinterpret_cast<void*>(Value); }
index 487096a171057cbb18cab518c87eee1fae7296ba..036cf60388562c445e7a674ba090d8adaaa73253 100644 (file)
@@ -142,16 +142,19 @@ namespace llvm {
       return T();
     }
 
-    /// \brief If the union is set to the first pointer type we can get an
-    /// address pointing to it.
-    template <typename T>
-    PT1 const *getAddrOf() const {
+    /// \brief If the union is set to the first pointer type get an address
+    /// pointing to it.
+    PT1 const *getAddrOfPtr1() const {
+      return const_cast<PointerUnion *>(this)->getAddrOfPtr1();
+    }
+
+    /// \brief If the union is set to the first pointer type get an address
+    /// pointing to it.
+    PT1 *getAddrOfPtr1() {
       assert(is<PT1>() && "Val is not the first pointer");
       assert(get<PT1>() == Val.getPointer() &&
          "Can't get the address because PointerLikeTypeTraits changes the ptr");
-      T const *can_only_get_address_of_first_pointer_type
-                        = reinterpret_cast<PT1 const *>(Val.getAddrOfPointer());
-      return can_only_get_address_of_first_pointer_type;
+      return (PT1 *)Val.getAddrOfPointer();
     }
     
     /// Assignment operators - Allow assigning into this union from either
index e27dd4b78507cd3cc50930d4326ee5e08f0afe4d..374357d9c6b7d2099ced4d2eca64ee0454012877 100644 (file)
@@ -69,7 +69,7 @@ public:
       return 0;
     
     if (Val.template is<EltTy>())
-      return Val.template getAddrOf<EltTy>();
+      return Val.getAddrOfPtr1();
     
     return Val.template get<VecTy *>()->begin();