[cfe-commits] r160401 - /cfe/trunk/include/clang/AST/RecursiveASTVisitor.h

Douglas Gregor dgregor at apple.com
Tue Jul 17 15:32:15 PDT 2012


Author: dgregor
Date: Tue Jul 17 17:32:15 2012
New Revision: 160401

URL: http://llvm.org/viewvc/llvm-project?rev=160401&view=rev
Log:
Reinstate the GCC_CAST hack; I apparently did not appease GCC with r160397.

Modified:
    cfe/trunk/include/clang/AST/RecursiveASTVisitor.h

Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=160401&r1=160400&r2=160401&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
+++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Tue Jul 17 17:32:15 2012
@@ -464,11 +464,19 @@
 bool RecursiveASTVisitor<Derived>::dataTraverseNode(Stmt *S,
                                                     bool &EnqueueChildren) {
 
+// The cast for DISPATCH_WALK is needed for older versions of g++, but causes
+// problems for MSVC.  So we'll skip the cast entirely for MSVC.
+#if defined(_MSC_VER)
+  #define GCC_CAST(CLASS)
+#else
+  #define GCC_CAST(CLASS) (bool (RecursiveASTVisitor::*)(CLASS*))
+#endif
+
   // Dispatch to the corresponding WalkUpFrom* function only if the derived
   // class didn't override Traverse* (and thus the traversal is trivial).
 #define DISPATCH_WALK(NAME, CLASS, VAR) \
-  if ((bool (Derived::*)(CLASS*))&RecursiveASTVisitor::Traverse##NAME == \
-      &Derived::Traverse##NAME) \
+  if (&RecursiveASTVisitor::Traverse##NAME == \
+      GCC_CAST(CLASS)&Derived::Traverse##NAME) \
     return getDerived().WalkUpFrom##NAME(static_cast<CLASS*>(VAR)); \
   EnqueueChildren = false; \
   return getDerived().Traverse##NAME(static_cast<CLASS*>(VAR));
@@ -508,6 +516,7 @@
   }
 
 #undef DISPATCH_WALK
+#undef GCC_CAST
 
   return true;
 }





More information about the cfe-commits mailing list