[cfe-commits] r160404 - /cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
Douglas Gregor
dgregor at apple.com
Tue Jul 17 16:07:45 PDT 2012
Author: dgregor
Date: Tue Jul 17 18:07:44 2012
New Revision: 160404
URL: http://llvm.org/viewvc/llvm-project?rev=160404&view=rev
Log:
Eliminating the GCC_CAST hack, take two.
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=160404&r1=160403&r2=160404&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
+++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Tue Jul 17 18:07:44 2012
@@ -464,19 +464,12 @@
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 (&RecursiveASTVisitor::Traverse##NAME == \
- GCC_CAST(CLASS)&Derived::Traverse##NAME) \
+ if (bool (Derived::*DerivedFn)(CLASS*) = &Derived::Traverse##NAME) \
+ if (bool (Derived::*BaseFn)(CLASS*) = &RecursiveASTVisitor::Traverse##NAME)\
+ if (DerivedFn == BaseFn) \
return getDerived().WalkUpFrom##NAME(static_cast<CLASS*>(VAR)); \
EnqueueChildren = false; \
return getDerived().Traverse##NAME(static_cast<CLASS*>(VAR));
@@ -516,7 +509,6 @@
}
#undef DISPATCH_WALK
-#undef GCC_CAST
return true;
}
More information about the cfe-commits
mailing list