From 290ad96e86969b72d46d3444a41030d66f82b60e Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Wed, 22 Jan 2014 07:28:49 +0000 Subject: [PATCH] Add unused result attr to the casting templates This helped catch a couple of bugs locally. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199793 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/Casting.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/include/llvm/Support/Casting.h b/include/llvm/Support/Casting.h index d70acbf24c4..720c34f7b49 100644 --- a/include/llvm/Support/Casting.h +++ b/include/llvm/Support/Casting.h @@ -15,6 +15,7 @@ #ifndef LLVM_SUPPORT_CASTING_H #define LLVM_SUPPORT_CASTING_H +#include "llvm/Support/Compiler.h" #include "llvm/Support/type_traits.h" #include @@ -131,7 +132,7 @@ struct isa_impl_wrap { // if (isa(myVal)) { ... } // template -inline bool isa(const Y &Val) { +LLVM_ATTRIBUTE_UNUSED_RESULT inline bool isa(const Y &Val) { return isa_impl_wrap::SimpleType>::doit(Val); } @@ -245,7 +246,8 @@ inline typename cast_retty::ret_type cast(Y *Val) { // accepted. // template -inline typename cast_retty::ret_type cast_or_null(Y *Val) { +LLVM_ATTRIBUTE_UNUSED_RESULT 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); @@ -261,19 +263,21 @@ inline typename cast_retty::ret_type cast_or_null(Y *Val) { // template -inline typename enable_if_c::value, - typename cast_retty::ret_type>::type +LLVM_ATTRIBUTE_UNUSED_RESULT inline typename enable_if_c< + !is_simple_type::value, typename cast_retty::ret_type>::type dyn_cast(const Y &Val) { return isa(Val) ? cast(Val) : 0; } template -inline typename cast_retty::ret_type dyn_cast(Y &Val) { +LLVM_ATTRIBUTE_UNUSED_RESULT inline typename cast_retty::ret_type +dyn_cast(Y &Val) { return isa(Val) ? cast(Val) : 0; } template -inline typename cast_retty::ret_type dyn_cast(Y *Val) { +LLVM_ATTRIBUTE_UNUSED_RESULT inline typename cast_retty::ret_type +dyn_cast(Y *Val) { return isa(Val) ? cast(Val) : 0; } @@ -281,7 +285,8 @@ inline typename cast_retty::ret_type dyn_cast(Y *Val) { // value is accepted. // template -inline typename cast_retty::ret_type dyn_cast_or_null(Y *Val) { +LLVM_ATTRIBUTE_UNUSED_RESULT inline typename cast_retty::ret_type +dyn_cast_or_null(Y *Val) { return (Val && isa(Val)) ? cast(Val) : 0; } -- 2.34.1