use a c-style cast instead of reinterpret-cast, as sometimes the
authorChris Lattner <sabre@nondot.org>
Mon, 8 Feb 2010 22:05:38 +0000 (22:05 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 8 Feb 2010 22:05:38 +0000 (22:05 +0000)
cast needs to adjust for a vtable pointer when going from base to
derived type (when the base doesn't have a vtable but the
derived type does).

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

include/llvm/Support/Casting.h

index 37a7c3b02d4fa82587bc944fa307961515cd09f8..17bcb59905995a7ddfa75d5ab714e467296bc7f5 100644 (file)
@@ -180,8 +180,9 @@ template<class To, class From, class SimpleFrom> struct cast_convert_val {
 template<class To, class FromTy> struct cast_convert_val<To,FromTy,FromTy> {
   // This _is_ a simple type, just cast it.
   static typename cast_retty<To, FromTy>::ret_type doit(const FromTy &Val) {
-    return reinterpret_cast<typename cast_retty<To, FromTy>::ret_type>(
-                         const_cast<FromTy&>(Val));
+    typename cast_retty<To, FromTy>::ret_type Res2
+     = (typename cast_retty<To, FromTy>::ret_type)const_cast<FromTy&>(Val);
+    return Res2;
   }
 };