On Jul 16, 2012, at 8:45 AM, Aaron Ballman <[email protected]> wrote:
> 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 @@ > } This GCC_CAST thing is pretty hideous. Is there no non-macro, well-formed way to appease both compilers? Like, for example, creating a local variable of type bool (recursiveASTVisitor::*)(CLASS*)? - Doug _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
