[clang-tools-extra] r215799 - AvoidCStyleCastsCheck: don't warn on casts in macros

David Blaikie dblaikie at gmail.com
Fri Aug 15 19:15:40 PDT 2014


On Fri, Aug 15, 2014 at 5:53 PM, Alexander Kornienko <alexfh at google.com> wrote:
> Author: alexfh
> Date: Fri Aug 15 19:53:20 2014
> New Revision: 215799
>
> URL: http://llvm.org/viewvc/llvm-project?rev=215799&view=rev
> Log:
> AvoidCStyleCastsCheck: don't warn on casts in macros

What's the particular justification?

c-style casts, even hidden in macros, seem like they'd still be a bit
subtle/surprising/etc.

>
> Modified:
>     clang-tools-extra/trunk/clang-tidy/google/AvoidCStyleCastsCheck.cpp
>     clang-tools-extra/trunk/test/clang-tidy/avoid-c-style-casts.cpp
>
> Modified: clang-tools-extra/trunk/clang-tidy/google/AvoidCStyleCastsCheck.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/google/AvoidCStyleCastsCheck.cpp?rev=215799&r1=215798&r2=215799&view=diff
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/google/AvoidCStyleCastsCheck.cpp (original)
> +++ clang-tools-extra/trunk/clang-tidy/google/AvoidCStyleCastsCheck.cpp Fri Aug 15 19:53:20 2014
> @@ -60,6 +60,12 @@ bool pointedTypesAreEqual(QualType Sourc
>  void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
>    const auto *CastExpr = Result.Nodes.getNodeAs<CStyleCastExpr>("cast");
>
> +  auto ParenRange = CharSourceRange::getTokenRange(CastExpr->getLParenLoc(),
> +                                                   CastExpr->getRParenLoc());
> +  // Ignore casts in macros.
> +  if (ParenRange.getBegin().isMacroID() || ParenRange.getEnd().isMacroID())
> +    return;
> +
>    // Casting to void is an idiomatic way to mute "unused variable" and similar
>    // warnings.
>    if (CastExpr->getTypeAsWritten()->isVoidType())
> @@ -69,8 +75,6 @@ void AvoidCStyleCastsCheck::check(const
>        CastExpr->getSubExprAsWritten()->getType().getCanonicalType();
>    QualType DestType = CastExpr->getTypeAsWritten().getCanonicalType();
>
> -  auto ParenRange = CharSourceRange::getTokenRange(CastExpr->getLParenLoc(),
> -                                                   CastExpr->getRParenLoc());
>    if (SourceType == DestType) {
>      diag(CastExpr->getLocStart(), "Redundant cast to the same type.")
>          << FixItHint::CreateRemoval(ParenRange);
> @@ -84,8 +88,6 @@ void AvoidCStyleCastsCheck::check(const
>
>    auto ReplaceWithCast = [&](StringRef CastType) {
>      diag_builder << ("Use " + CastType + ".").str();
> -    if (ParenRange.getBegin().isMacroID() || ParenRange.getEnd().isMacroID())
> -      return;
>
>      const Expr *SubExpr = CastExpr->getSubExprAsWritten()->IgnoreImpCasts();
>      std::string CastText = (CastType + "<" + DestTypeString + ">").str();
>
> Modified: clang-tools-extra/trunk/test/clang-tidy/avoid-c-style-casts.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/avoid-c-style-casts.cpp?rev=215799&r1=215798&r2=215799&view=diff
> ==============================================================================
> --- clang-tools-extra/trunk/test/clang-tidy/avoid-c-style-casts.cpp (original)
> +++ clang-tools-extra/trunk/test/clang-tidy/avoid-c-style-casts.cpp Fri Aug 15 19:53:20 2014
> @@ -105,9 +105,6 @@ void test_templates() {
>  #define CAST(type, value) (type)(value)
>  void macros(double d) {
>    int i = CAST(int, d);
> -  // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: C-style casts are discouraged. Use static_cast.
> -  // CHECK-FIXES: #define CAST(type, value) (type)(value)
> -  // CHECK-FIXES: int i = CAST(int, d);
>  }
>
>  enum E { E1 = 1 };
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list