diff options
author | Luboš Luňák <l.lunak@suse.cz> | 2013-05-06 15:14:35 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@suse.cz> | 2013-05-06 16:49:36 +0200 |
commit | d01768c31a0658c8a74e0dd3a95b2d781639d18e (patch) | |
tree | 397c6ffc4666da3bdd24bb4e8380bb0fa1f0759a | |
parent | ignore already seen locations in compiler plugins (diff) | |
download | core-d01768c31a0658c8a74e0dd3a95b2d781639d18e.tar.gz core-d01768c31a0658c8a74e0dd3a95b2d781639d18e.zip |
Revert "ignore already seen locations in compiler plugins"
This does not always work well, e.g. when building a return value
in a return statement from a temporary, there is CXXConstructExpr
containing CXXTemporaryObjectExpr, which both share the same location.
This reverts commit 1c0669af2f1f58e6431b5e489ac48a883e242ba7.
-rw-r--r-- | compilerplugins/clang/plugin.cxx | 21 | ||||
-rw-r--r-- | compilerplugins/clang/plugin.hxx | 1 |
2 files changed, 6 insertions, 16 deletions
diff --git a/compilerplugins/clang/plugin.cxx b/compilerplugins/clang/plugin.cxx index bfcec730003d..85bd69625b09 100644 --- a/compilerplugins/clang/plugin.cxx +++ b/compilerplugins/clang/plugin.cxx @@ -56,21 +56,12 @@ bool Plugin::ignoreLocation( SourceLocation loc ) const char* bufferName = compiler.getSourceManager().getPresumedLoc( expansionLoc ).getFilename(); if( bufferName == NULL ) return true; - if( strncmp( bufferName, OUTDIR, strlen( OUTDIR )) != 0 - && strncmp( bufferName, WORKDIR, strlen( WORKDIR )) != 0 - && strncmp( bufferName, BUILDDIR, strlen( BUILDDIR )) != 0 - && strncmp( bufferName, SRCDIR, strlen( SRCDIR )) != 0 ) - return true; // not in LO sources - // Sometimes a VisitXXX function may be called more than once for one source location. - // This can happen e.g. with a default argument for a function, if it involves constructing - // a temporary, then this temporary will be constructed whenever the function is called - // and the default argument is needed. As this would mean processing the same piece of code - // more than once, and thus possibly modifying the source code more than once, just - // ignore an already seen location. - if( alreadySeen.find( loc ) != alreadySeen.end()) - return true; - alreadySeen.insert( loc ); - return false; + if( strncmp( bufferName, OUTDIR, strlen( OUTDIR )) == 0 + || strncmp( bufferName, WORKDIR, strlen( WORKDIR )) == 0 + || strncmp( bufferName, BUILDDIR, strlen( BUILDDIR )) == 0 + || strncmp( bufferName, SRCDIR, strlen( SRCDIR )) == 0 ) + return false; // ok + return true; } void Plugin::registerPlugin( Plugin* (*create)( CompilerInstance&, Rewriter& ), const char* optionName, bool isRewriter ) diff --git a/compilerplugins/clang/plugin.hxx b/compilerplugins/clang/plugin.hxx index 52f6273e16e2..da336818cccb 100644 --- a/compilerplugins/clang/plugin.hxx +++ b/compilerplugins/clang/plugin.hxx @@ -53,7 +53,6 @@ class Plugin bool ignoreLocation( const Decl* decl ); bool ignoreLocation( const Stmt* stmt ); CompilerInstance& compiler; - set< SourceLocation > alreadySeen; private: static void registerPlugin( Plugin* (*create)( CompilerInstance&, Rewriter& ), const char* optionName, bool isRewriter ); template< typename T > static Plugin* createHelper( CompilerInstance& compiler, Rewriter& rewriter ); |