diff --git a/include/llvm/Support/Casting.h b/include/llvm/Support/Casting.h index 353611fc121..48988f8a6bb 100644 --- a/include/llvm/Support/Casting.h +++ b/include/llvm/Support/Casting.h @@ -205,9 +205,8 @@ inline typename cast_retty::ret_type cast(const Y &Val) { // accepted. // template -inline typename cast_retty::ret_type cast_or_null(const Y &Val) { - typedef typename cast_retty::ret_type ret_type; - if (!Val) return ret_type(); +inline typename cast_retty::ret_type cast_or_null(Y *Val) { + if (Val == 0) return 0; assert(isa(Val) && "cast_or_null() argument of incompatible type!"); return cast(Val); } @@ -223,8 +222,7 @@ inline typename cast_retty::ret_type cast_or_null(const Y &Val) { template inline typename cast_retty::ret_type dyn_cast(const Y &Val) { - typedef typename cast_retty::ret_type ret_type; - return isa(Val) ? cast(Val) : (ret_type)ret_type(); + return isa(Val) ? cast(Val) : 0; } // dyn_cast_or_null - Functionally identical to dyn_cast, except that a null @@ -232,8 +230,7 @@ inline typename cast_retty::ret_type dyn_cast(const Y &Val) { // template inline typename cast_retty::ret_type dyn_cast_or_null(const Y &Val) { - typedef typename cast_retty::ret_type ret_type; - return (Val && isa(Val)) ? cast(Val) : (ret_type)ret_type(); + return (Val && isa(Val)) ? cast(Val) : 0; }