diff options
author | Argiris Kirtzidis <akyrtzi@gmail.com> | 2009-08-14 19:01:37 +0000 |
---|---|---|
committer | Argiris Kirtzidis <akyrtzi@gmail.com> | 2009-08-14 19:01:37 +0000 |
commit | 1ddb3ba4bf15db09a286ef5ebbca9bf49b0fa890 (patch) | |
tree | 81c4d8d573acef69a213aa31a54d6f39a2f26bd6 /include/llvm/Support | |
parent | 41cb734efafb8fa8bc22a0f33dd137b105b95be6 (diff) | |
download | external_llvm-1ddb3ba4bf15db09a286ef5ebbca9bf49b0fa890.zip external_llvm-1ddb3ba4bf15db09a286ef5ebbca9bf49b0fa890.tar.gz external_llvm-1ddb3ba4bf15db09a286ef5ebbca9bf49b0fa890.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
Diffstat (limited to 'include/llvm/Support')
-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; } |