forked from OSchip/llvm-project
Revert r160404, "Eliminating the GCC_CAST hack, take two.", for now.
It crashes mingw32-gcc-4.4. llvm-svn: 160486
This commit is contained in:
parent
b1680655a6
commit
9efaf227d1
|
@ -464,12 +464,19 @@ template<typename Derived>
|
|||
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::*DerivedFn)(CLASS*) = &Derived::Traverse##NAME) \
|
||||
if (bool (Derived::*BaseFn)(CLASS*) = &RecursiveASTVisitor::Traverse##NAME)\
|
||||
if (DerivedFn == BaseFn) \
|
||||
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));
|
||||
|
@ -509,6 +516,7 @@ bool RecursiveASTVisitor<Derived>::dataTraverseNode(Stmt *S,
|
|||
}
|
||||
|
||||
#undef DISPATCH_WALK
|
||||
#undef GCC_CAST
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue