diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-08-14 19:01:37 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-08-14 19:01:37 +0000 |
commit | 9a0b165cb58cb5cf49cb3a143c302029f389acb2 (patch) | |
tree | 81c4d8d573acef69a213aa31a54d6f39a2f26bd6 | |
parent | bba9f5f37859f1d53ff061695bfc8c22133c6f0e (diff) | |
download | external_llvm-9a0b165cb58cb5cf49cb3a143c302029f389acb2.zip external_llvm-9a0b165cb58cb5cf49cb3a143c302029f389acb2.tar.gz external_llvm-9a0b165cb58cb5cf49cb3a143c302029f389acb2.tar.bz2 |
Revert r78424.
In order for the changes in r78424 to work properly, cast_retty<X,Y> should return an object instead of a reference, and it's not clear that this approach has real advantages.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79023 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Support/Casting.h | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/include/llvm/Support/Casting.h b/include/llvm/Support/Casting.h index 353611f..48988f8 100644 --- a/include/llvm/Support/Casting.h +++ b/include/llvm/Support/Casting.h @@ -205,9 +205,8 @@ inline typename cast_retty<X, Y>::ret_type cast(const Y &Val) { // accepted. // template <class X, class Y> -inline typename cast_retty<X, Y>::ret_type cast_or_null(const Y &Val) { - typedef typename cast_retty<X, Y>::ret_type ret_type; - if (!Val) return ret_type(); +inline typename cast_retty<X, Y*>::ret_type cast_or_null(Y *Val) { + if (Val == 0) return 0; assert(isa<X>(Val) && "cast_or_null<Ty>() argument of incompatible type!"); return cast<X>(Val); } @@ -223,8 +222,7 @@ inline typename cast_retty<X, Y>::ret_type cast_or_null(const Y &Val) { template <class X, class Y> inline typename cast_retty<X, Y>::ret_type dyn_cast(const Y &Val) { - typedef typename cast_retty<X, Y>::ret_type ret_type; - return isa<X>(Val) ? cast<X, Y>(Val) : (ret_type)ret_type(); + return isa<X>(Val) ? cast<X, Y>(Val) : 0; } // dyn_cast_or_null<X> - Functionally identical to dyn_cast, except that a null @@ -232,8 +230,7 @@ inline typename cast_retty<X, Y>::ret_type dyn_cast(const Y &Val) { // template <class X, class Y> inline typename cast_retty<X, Y>::ret_type dyn_cast_or_null(const Y &Val) { - typedef typename cast_retty<X, Y>::ret_type ret_type; - return (Val && isa<X>(Val)) ? cast<X, Y>(Val) : (ret_type)ret_type(); + return (Val && isa<X>(Val)) ? cast<X, Y>(Val) : 0; } |