summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@suse.cz>2013-05-06 15:14:35 +0200
committerLuboš Luňák <l.lunak@suse.cz>2013-05-06 16:49:36 +0200
commitd01768c31a0658c8a74e0dd3a95b2d781639d18e (patch)
tree397c6ffc4666da3bdd24bb4e8380bb0fa1f0759a /compilerplugins
parenta0da672521f806d11f9922601328de3ab0542187 (diff)
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.
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/plugin.cxx21
-rw-r--r--compilerplugins/clang/plugin.hxx1
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 );