[cfe-commits] r148577 - in /cfe/trunk: lib/AST/ lib/Analysis/ lib/CodeGen/ lib/Frontend/ lib/Index/ lib/Parse/ lib/Sema/ lib/StaticAnalyzer/Checkers/ lib/StaticAnalyzer/Core/ tools/libclang/

David Blaikie dblaikie at gmail.com
Sat Jan 21 08:54:55 PST 2012


On Sat, Jan 21, 2012 at 5:11 AM, Sebastian Redl
<sebastian.redl at getdesigned.at> wrote:
>
> On 20.01.2012, at 22:50, David Blaikie wrote:
>
> Author: dblaikie
> Date: Fri Jan 20 15:50:17 2012
> New Revision: 148577
>
> URL: http://llvm.org/viewvc/llvm-project?rev=148577&view=rev
> Log:
> More dead code removal (using -Wunreachable-code)
>
>
> Modified: cfe/trunk/lib/AST/Decl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=148577&r1=148576&r2=148577&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/Decl.cpp (original)
> +++ cfe/trunk/lib/AST/Decl.cpp Fri Jan 20 15:50:17 2012
> @@ -48,8 +48,6 @@
>     case VisibilityAttr::Protected:
>       return ProtectedVisibility;
>     }
> -
> -    return DefaultVisibility;
>   }
>
>
> Should an llvm_unreachable should be added here?

Clang knows it's unreachable because the switch is fully covered - GCC
doesn't, but won't complain because the function still eventually
returns.

I only added llvm_unreachables back in where necessary to silence GCC
warnings, though it's possible to add them more liberally for code
documentation, etc.

I don't mind either way.

> Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=148577&r1=148576&r2=148577&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Fri Jan 20 15:50:17 2012
> @@ -2175,36 +2170,28 @@
>   case BuiltinType::UChar:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtub_p;
> -    break;
>   case BuiltinType::Char_S:
>   case BuiltinType::SChar:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtsb_p;
> -    break;
>   case BuiltinType::UShort:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequh_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtuh_p;
> -    break;
>   case BuiltinType::Short:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequh_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtsh_p;
> -    break;
>   case BuiltinType::UInt:
>   case BuiltinType::ULong:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequw_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtuw_p;
> -    break;
>   case BuiltinType::Int:
>   case BuiltinType::Long:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequw_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtsw_p;
> -    break;
>   case BuiltinType::Float:
>     return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpeqfp_p :
>                             llvm::Intrinsic::ppc_altivec_vcmpgtfp_p;
> -    break;
>   }
> -  return llvm::Intrinsic::not_intrinsic;
> }
>
>
> And here.

In this case both GCC and Clang know that the end of the function is
unreachable (& don't give -Wreturn-type warnings)  because the switch
is fully covered (all cases /and/ a default have return statements).
Purely for documentation purposes, one could be added, but it would
pretty much be a compiler bug if they were hit (unlike the previous
case where the unreachable could be hit by relatively easy subversion
of the type system (wedging a non-enum value into the enum))

- David




More information about the cfe-commits mailing list