Author: aaronballman Date: Mon Jul 16 10:45:33 2012 New Revision: 160281 URL: http://llvm.org/viewvc/llvm-project?rev=160281&view=rev Log: Fixing an MSVC warning -- the compiler did not like the cast added to work around a g++ bug (it would claim to possibly emit incorrect code).
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=160281&r1=160280&r2=160281&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original) +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Mon Jul 16 10:45:33 2012 @@ -464,12 +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). - // The cast here is necessary to work around a bug in old versions of g++. #define DISPATCH_WALK(NAME, CLASS, VAR) \ if (&RecursiveASTVisitor::Traverse##NAME == \ - (bool (RecursiveASTVisitor::*)(CLASS*))&Derived::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 @@ } #undef DISPATCH_WALK +#undef GCC_CAST return true; } _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits