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

Alexander Kornienko alexfh at google.com
Fri Aug 15 17:53:20 PDT 2014


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

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 };





More information about the cfe-commits mailing list